验证 crontab 是否有效

验证 crontab 是否有效

我想要验证某个 crontab 是否正常工作。我添加了一个这样的作业:

  */2 * * * * /path_to_my_php_script/info.php >/dev/null 2>&1

我知道我重定向到空设备,但我不确定上述命令是否良好。

*编辑 1:在我的 /var/log/syslog 中每两分钟就会出现以下错误:

 (CRON) error (grandchild #2788 failed with exit status 2)

*编辑2:这项新工作日志中没有错误:

 */2 * * * * /usr/bin/php /path_to_my_php_script/info.php >/dev/null 2>&1

答案1

虽然非常罕见,但有时即使服务正在运行,cron 也会停止正常工作。以下是如何验证 crond 是否正在运行并停止/启动服务。

使用 systemctl:

systemctl status cron
systemctl restart cron

较旧的方法:
在 CentOS 和其他基于 Red Hat 的系统上:

service crond status
service crond stop
service crond start

在 Ubuntu 和其他基于 Debian 的系统上:

service cron status
service cron stop
service cron start

答案2

crontab 条目的语法看起来正确。事实上,如果您使用“ crontab -e”编辑 crontab(您应该这样做),如果您指定语法无效的 crontab 条目,您将收到错误。

  1. 首先,/path_to_my_php_script/info.php从命令行运行正确吗?

  2. 如果是这样,它也能像这样正确运行吗?:

    /bin/sh -c "(export PATH=/usr/bin:/bin; /path_to_my_php_script/info.php </dev/null)"
    
  3. 如果有效的话,它是像这样工作的吗?

    /bin/sh -c "(export PATH=/usr/bin:/bin; /path_to_my_php_script/info.php </dev/null >/dev/null 2>&1)"
    

步骤 (3) 类似于 cron 运行程序的方式(如“man 5 cron”中所述)。

您最有可能遇到的问题是 cron 用于运行程序的 PATH 限制过多。因此,您可能希望在 crontab 条目顶部添加类似以下内容(您需要添加脚本所需的任何目录):

PATH=~/bin:/usr/bin/:/bin

还要注意,cron 默认使用/bin/sh,而不是 bash。如果您需要 bash,还请将其添加到 crontab 文件的开头:

SHELL=/bin/bash

请注意,这两项变化都会影响全部crontab 条目。如果您只想修改info.php程序的这些值,您可以执行以下操作:

*/2 * * * * /bin/bash -c ". ~/.bashrc; /path_to_my_php_script/info.php"

还值得一提的是,在配置了“邮件”的系统上(即配置了 MTA [sendmail/postfix/etc] 的系统),crontab 程序的所有输出都会自动通过电子邮件发送给您。默认的 Ubuntu 桌面系统不会配置本地邮件,但如果您在服务器上工作,您只需在终端中输入“mail”即可查看所有这些 cron 邮件。这也适用于“ at”命令。

答案3

不要将错误输出重定向到 /dev/null 和 grep /var/log/syslog 进行 cron 输出。

grep cron /var/log/syslog

您可以在编辑后保存文件/etc/crontab或其中的文件时立即显示错误/etc/cron.d/

tail -f /var/log/syslog | grep --line-buffered cron

如果编辑成功,你只会看到RELOAD通知,错误将发生如下

Jul 9 09:39:01 vm cron[1129]: Error: bad day-of-month; while reading /etc/cron.d/new 

答案4

这是一个老问题,答案也非常复杂。最简单的方法是将这一行添加到你的 crontab 中

* * * * * /bin/bash -l -c 'date > ~/cron-test.txt'

它会每分钟将当前日期写入文件~/cron-test.txt

然后你只需运行cat ~/cron-test.txt并检查显示的日期是否是当前日期。如果是,则 crontab 工作正常。

相关内容