我试图设置一个根cron作业,以root身份运行Bash脚本,并在每月的每个小时,每个月的每月7,37分钟运行。该脚本位于/usr/bin
并命名为tunlrupdate.sh
。它更新Tunlr的DNS。
$ ls -l /usr/bin/tunlrupdate.sh
-rwxr-xr-x 1 root root 2133 Sep 24 15:42 /usr/bin/tunlrupdate.sh
此Bash脚本可在此处获得。
调用脚本时,它将在以下位置的日志中记录正在发生的事情 /var/log/tunlr.log
要添加此root cron作业,我对root的crontab使用了标准
sudo crontab -e
并在最后插入这2行。我希望cron以root身份运行脚本。
# check for updated Tunlr DNS every 30 minutes at the hour + 7 mn and hour + 37 mn
07,37 * * * * root /usr/bin/tunlrupdate.sh
稍后的命令sudo crontab -l
确认已插入cron作业。
我确实重新启动了Ubuntu,并且正在检查日志文件中cron作业是否正确启动。但是,日志文件中没有任何内容,这/var/log/tunlr.log
意味着该作业从未成功启动。
我确实检查了是否从命令行运行脚本
sudo /usr/bin/tunlrupdate.sh
然后相应地更新日志文件。
为什么此Cron作业在我的系统中未按计划运行?
更新1:到目前为止,所有建议的解决方案均无效。感谢Olli提供的CLI列出系统日志sudo grep CRON /var/log/syslog
。但是我确实遇到了CRON错误
CRON[13092]: (root) CMD ( [ -x /usr/lib/php5/maxlifetime ] && [ -d /var/lib/php5 ]
&& find /var/lib/php5/ -depth -mindepth 1 -maxdepth 1 -type f -cmin +$(/usr/lib/php
/maxlifetime) ! -execdir fuser -s {} 2>/dev/null \; -delete)
使用建议的PATH =插入和使用根目录的绝对路径来执行脚本中的函数,或者此处未使用此建议的解决方案。我仍然收到此错误。
经过一番搜索我准确定位文件中的错误/usr/lib/php5/maxlifetime
的解释在这里:Change #!/bin/sh -e --> #!/bin/sh -x
然后在我的系统中列出CRON错误日志
sudo grep CRON /var/log/syslog
Feb 11 18:07:01 Marius-PC CRON[14067]: (root) CMD (root /usr/bin/tunlrupdate.sh)
Feb 11 18:07:01 Marius-PC CRON[14066]: (root) MAIL (mailed 1 byte of output; but got
status 0x00ff, #012)
我仍然没有执行bash脚本。这次没有错误显示在日志中。为了确保这不是脚本的内容,我将脚本缩减为以下三行:
#!/bin/bash
LOGFILE=/var/log/tunlr.log
echo $LOGFILE >> $LOGFILE
我仍然没有完成Cron工作。日志文件中未写入任何内容。因此,即使是一个空脚本也不会在cron中运行?我不明白 我知道尝试将脚本简化为以下两行:
#!/bin/bash
exit 0
并且仍然是相同的错误日志。cron脚本无法通过...