直接输入命令可以执行,但在 cron 不执行? - V2EX
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
Devin
V2EX    Linux

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

  •  
  •   Devin Feb 29, 2016 4539 views
    This topic created in 3725 days ago, the information mentioned may be changed or developed.
    命令如下:
    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 replies    2016-03-21 10:35:45 +08:00
    xmgit
        1
    xmgit  
       Feb 29, 2016
    试试在 cron 中打印 PATH 看看路径变量
    Devin
        3
    Devin  
    OP
       Feb 29, 2016 via iPhone
    @Lucups 不是这个的问题,因为我没安装邮件服务端, cron 执行失败就会出现第二条 log ,成功执行则不会
    Devin
        4
    Devin  
    OP
       Feb 29, 2016 via iPhone
    @Bardon 不是很懂。。。
    LoliconInside
        5
    LoliconInside  
       Feb 29, 2016
    1.cron 中的命令最好用全路径,例如 /usr/bin/GET ;
    2.最好装个 sendmail 之类的 MTA 服务,看 cron 所在用户的邮件里写的无法执行的原因。
    47jm9ozp
        6
    47jm9ozp  
       Feb 29, 2016
    装个邮件服务端看错误提示

    一般不是环境变量就是权限……
    Devin
        7
    Devin  
    OP
       Feb 29, 2016
    @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  
       Mar 1, 2016
    环境变量问题,最好单独做成配置文件放在 /etc/cron.d 目录里
    配置文件里环境变量想怎么设就怎么设,完全不会影响其他任务
    还有告警日志最好把系统默认用邮件配成本地 log
    Devin
        9
    Devin  
    OP
       Mar 1, 2016 via iPhone
    @sunsol 我是把命令放到 /etc/firewall-test.sh 里面,可以直接顺利执行这个脚本,但是放在 cron 里则不行,要把 iptables 改成 /sbin/iptables 才行,是否.sh 脚本里的命令也要带全路径,才可以在 cron 里执行?
    suueyoung
        10
    suueyoung  
       Mar 1, 2016
    80%觉得是环境变量的锅.
    janxin
        11
    janxin  
       Mar 1, 2016 via iPhone
    一般环境变量没有,程序指定全路径
    LoliconInside
        12
    LoliconInside  
       Mar 1, 2016
    @Devin 这就对了嘛,懒得指定环境变量的话,直接写全路径就啥事没有了。
    qiaoxin
        13
    qiaoxin  
       Mar 2, 2016 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  
       Mar 2, 2016 via Android   1
    以上方法选择一种就可以了,推荐选择 1>2>3>4
    Devin
        15
    Devin  
    OP
       Mar 2, 2016
    @qiaoxin 第一条可以,我以前一直以为 cron 里只能加定时任务。。。
    yuedingwangji
        16
    yuedingwangji  
       Mar 5, 2016
    写了个脚本,手动执行没有任何问题,放到 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  
       Mar 21, 2016
    crontab 好用,但也很坑,但坑也就是基环境变量的问题
    About     Help     Advertise     Blog     API     FAQ     Solana     1436 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 49ms UTC 17:00 PVG 01:00 LAX 10:00 JFK 13:00
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86