Cron不以root身份运行命令

我有一个名为/scripts/checkInternet的文件,它包含:

 #!/bin/bash WGET="/usr/bin/wget" rm /tmp/index.google $WGET -q --tries=10 --timeout=5 http://www.google.com -O /tmp/index.google &> /dev/null if [ ! -s /tmp/index.google ];then echo "Nope" ifdown eth0.4 ifup eth0.4 iptables-restore < /etc/iptables.rules else echo "Connected" fi rm /tmp/index.google 

我做了这个文件chmod +x 755 。 我可以作为根运行它,但作为root添加到一个cron它不起作用。

什么地方出了错? cron本身正在运行。 我在我的系统日志中看到CMD (/scripts/checkInternet) ,但缺less所需的结果。

从cron运行的所有问题的99%是由于$PATH无效造成的。 我打赌ifdownifupiptables-restore都缺less默认的$PATH 。 您需要指定这些的绝对path。

cron本身正在运行。 我在我的系统日志中看到CMD(/ scripts / checkInternet),但缺less所需的结果。

想一想。 如果您的脚本生成输出或错误,那么您希望输出到哪里?

在大多数Linux / Unix系统上,如果你的脚本产生任何输出(例如任何输出到STDOUT,或任何错误STDERR),那么它将通过电子邮件发送到crontab的所有者。 在大多数情况下,这是“根”。

Debian的cron手册页说:

cron会查看MAILTO是否有任何理由通过运行“this”crontab中的命令来发送邮件。 如果MAILTO被定义(并且非空),则邮件被发送给如此命名的用户。 如果MAILTO被定义但为空(MAILTO =“”),则不会发送邮件。 否则,邮件将被发送给crontab的所有者。

因此,请检查拥有此crontab的用户的邮件,或MAILTO指定的用户。 该电子邮件应该包含您正在寻找的错误。

在testing时,我个人更喜欢将任何错误日志或错误发送到文件,如下所示:

  5 0 * * * $HOME/bin/daily.job >> $HOME/tmp/out 2>&1 

或者我使用logging器将其发送到syslog ,如下所示:

  5 0 * * * $HOME/bin/daily.job 2>&1 | logger 

然后在第二个窗口中运行tail -f logfile