V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
Devin
V2EX  ›  Linux

直接输入命令可以执行,但在 cron 不执行?

  •  
  •   Devin · 2016-02-29 20:19:28 +08:00 · 4031 次点击
    这是一个创建于 3181 天前的主题,其中的信息可能已经有所发展或是发生改变。
    命令如下:
    iptables -F
    iptables -X
    iptables -Z
    iptables -P INPUT DROP
    iptables -P FORWARD DROP
    iptables -P OUTPUT DROP
    iptables -A OUTPUT -j LOG --log-prefix "[IPTABLES OUTPUT] " --log-level 7

    直接输入可以无误执行,但把脚本放在 cron 里
    0 0 * * * bash /etc/firewall-test.sh

    syslog 有记录,但不执行, log 如下
    (root) CMD (bash /etc/firewall-test.sh)
    (CRON) info (No MTA installed, discarding output)

    若把命令改成下面这样,顺利执行,应该是上面的命令出问题
    echo 9999 >> /etc/cronlog

    请问要怎么解决?
    17 条回复    2016-03-21 10:35:45 +08:00
    Bardon
        1
    Bardon  
       2016-02-29 20:30:39 +08:00
    试试在 cron 中打印 PATH 看看路径变量
    Devin
        3
    Devin  
    OP
       2016-02-29 21:07:43 +08:00 via iPhone
    @Lucups 不是这个的问题,因为我没安装邮件服务端, cron 执行失败就会出现第二条 log ,成功执行则不会
    Devin
        4
    Devin  
    OP
       2016-02-29 21:08:11 +08:00 via iPhone
    @Bardon 不是很懂。。。
    LoliconInside
        5
    LoliconInside  
       2016-02-29 21:14:40 +08:00
    1.cron 中的命令最好用全路径,例如 /usr/bin/GET ;
    2.最好装个 sendmail 之类的 MTA 服务,看 cron 所在用户的邮件里写的无法执行的原因。
    ooxxcc
        6
    ooxxcc  
       2016-02-29 21:17:14 +08:00
    装个邮件服务端看错误提示

    一般不是环境变量就是权限……
    Devin
        7
    Devin  
    OP
       2016-02-29 22:05:29 +08:00
    @Bardon
    @Lucups
    @LoliconInside
    @ooxxcc
    装了 exim4 ,查看日志 cat /var/mail/mail 如下
    /etc/firewall-locked.sh: line 1: iptables: command not found
    /etc/firewall-locked.sh: line 2: iptables: command not found
    /etc/firewall-locked.sh: line 3: iptables: command not found
    /etc/firewall-locked.sh: line 4: iptables: command not found
    /etc/firewall-locked.sh: line 5: iptables: command not found
    /etc/firewall-locked.sh: line 6: iptables: command not found
    /etc/firewall-locked.sh: line 7: iptables: command not found
    命令改成如下,顺利执行
    /sbin/iptables -F
    /sbin/iptables -X
    /sbin/iptables -Z
    /sbin/iptables -P INPUT DROP
    /sbin/iptables -P FORWARD DROP
    /sbin/iptables -P OUTPUT DROP
    /sbin/iptables -A OUTPUT -j LOG --log-prefix "[IPTABLES OUTPUT] " --log-level 7
    sunsol
        8
    sunsol  
       2016-03-01 07:40:39 +08:00
    环境变量问题,最好单独做成配置文件放在 /etc/cron.d 目录里
    配置文件里环境变量想怎么设就怎么设,完全不会影响其他任务
    还有告警日志最好把系统默认用邮件配成本地 log
    Devin
        9
    Devin  
    OP
       2016-03-01 07:56:38 +08:00 via iPhone
    @sunsol 我是把命令放到 /etc/firewall-test.sh 里面,可以直接顺利执行这个脚本,但是放在 cron 里则不行,要把 iptables 改成 /sbin/iptables 才行,是否.sh 脚本里的命令也要带全路径,才可以在 cron 里执行?
    suueyoung
        10
    suueyoung  
       2016-03-01 08:48:17 +08:00
    80%觉得是环境变量的锅.
    janxin
        11
    janxin  
       2016-03-01 09:00:54 +08:00 via iPhone
    一般环境变量没有,程序指定全路径
    LoliconInside
        12
    LoliconInside  
       2016-03-01 12:06:36 +08:00
    @Devin 这就对了嘛,懒得指定环境变量的话,直接写全路径就啥事没有了。
    qiaoxin
        13
    qiaoxin  
       2016-03-02 05:18:48 +08:00 via Android   ❤️ 1
    1. crontab -e ,然后在最上面加入 PATH=/bin:/usr/bin 等等。
    2. 或者在脚本里面指定 PATH 。
    3. 还可以这样* * * * * . /etc/profile && /your/shell.sh
    4. 修改 /etc/crontab 中的 PATH 。
    qiaoxin
        14
    qiaoxin  
       2016-03-02 05:28:41 +08:00 via Android   ❤️ 1
    以上方法选择一种就可以了,推荐选择 1>2>3>4
    Devin
        15
    Devin  
    OP
       2016-03-02 10:34:57 +08:00
    @qiaoxin 第一条可以,我以前一直以为 cron 里只能加定时任务。。。
    yuedingwangji
        16
    yuedingwangji  
       2016-03-05 01:00:22 +08:00
    写了个脚本,手动执行没有任何问题,放到 crontab 下执行就不行,百度了一堆,还是懵懂,初步得出结论和解决方法。

    导致 crontab 不执行的原因主要是 脚本里面设置了自定义变量。
    解决方法:
    脚本开头添加 source /etc/profile
    export 添加的自定义变量


    当手动执行脚本 OK ,但是 crontab 死活不执行时,很可能是环境变量惹的祸,可尝试在 crontab 中直接引入环境变量解决问题。如:

    0 * * * * . /etc/profile;/bin/sh /var/www/java/audit_no_count/bin/restart_audit.sh 网上找的,实测可用, lZ 可以试下
    gbcbooks
        17
    gbcbooks  
       2016-03-21 10:35:45 +08:00
    crontab 好用,但也很坑,但坑也就是基环境变量的问题
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4060 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 10:15 · PVG 18:15 · LAX 02:15 · JFK 05:15
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.