Cron 没有以 root 身份运行命令

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 身份运行它,但以 root 身份将其添加到 cron 中却不起作用。

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

答案1

99% 的 cron 运行问题都是由于无效的 造成的$PATH。我敢打赌ifdownifupiptables-restore都是默认的 中缺失的$PATH。您需要指定这些的绝对路径。

答案2

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

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

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

Debian 的cron 的手册页说:

如果 cron 有理由在“此”crontab 中运行命令后发送邮件,它将查看 MAILTO。如果定义了 MAILTO(且非空),则将向指定用户发送邮件。如果定义了 MAILTO 但为空(MAILTO=""),则不会发送邮件。否则将向 crontab 的所有者发送邮件。

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

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

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

或者我将其发送到使用记录器的 syslog, 像这样:

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

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

相关内容