我有一个名为的文件/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
。我敢打赌ifdown
,ifup
和iptables-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
在第二个窗口中运行。