每分钟cron作业有时都不会运行


every minute cron job sometimes not running

我有几个执行php脚本的cron作业。php 脚本有时会做一些繁重的工作,比如在 mysql 表中一次更新数百条记录。

问题是作业应该每分钟运行一次。但是,它会随机错过,因此不会每分钟执行一次。有时,它每 4-6 分钟执行一次,然后返回到每 1 分钟一次,错过 2-3 次,然后再次正常。

我使用的是 centos 6.5

请注意,php 运行正确,php 脚本本身没有任何问题,因为在运行时,我得到了预期的结果,并且还有大约 10 个其他类似的脚本同时运行(其他脚本每分钟或每 5 分钟)

工作:

/usr/bin/php "/var/www/html/phpScriptToExecute.php" >> /var/www/html/log/phpScriptLog.log 2>&1

我的看法是,这可能是同时运行太多同时运行并同时访问数据库的脚本的问题。

最后信息:/var/log/cron文件或phpScriptLog.log文件中没有错误。

原因可能是,您的 cron 作业需要 1 分钟以上的时间来执行,请在脚本末尾打印出开始时间和结束时间以进行验证。如果 cron 作业正在运行,Linux 将不会再次执行它。

我的猜测是它导致了 PHP 致命错误,但您的 PHP 可能没有配置为向 stderr 发送错误消息,这就是为什么您的 phpScriptLog.log 为空。你可以检查你的php.ini(或者只使用ini_set())进行以下操作:

  1. display_errors:如果您希望错误显示在 stderr 上,请将其设置为 on/true
  2. log_errors:如果要将错误消息发送到文件,请将其设置为 true
  3. error_log:将其指向要存储错误的文件

或者,如果您想要一个解决方案来避免重叠的 cron 作业,SO 中有很多。