PHP cron 脚本每分钟触发一次以上


PHP cron script firing more than once a minute

我有一个似乎每分钟运行不止一次的 cron 作业,考虑到 linux 只以分钟间隔处理,不确定这怎么可能。这是我研究它的方式。

首先,我确认/etc/cron.hourly、/etc/cron.daily 等中没有任何额外的条目......没有什么异常。

然后,我进入/etc/crontab 以确保没有额外的条目,那里什么都没有。

然后,我运行此命令以查看所有用户的 crontabs

for user in $(cut -f1 -d: /etc/passwd); do echo $user; crontab -u $user -l; done

。那里什么都没有,但是,根没有出现,但也许这是意料之中的

终于,我打crontab -l

正如预期的那样,我得到的只是一个条目:

* * * * * wget --no-check-certificate -q -O - https://...cron_custom_alerts.php

基于上述,我假设实际上只配置了一个 cron 作业。但是,我向正在运行的脚本添加了日志记录,并且每分钟看到多个执行。我输出 $_SERVER['PHP_SELF'] 和 $_SERVER['REMOTE_ADDR]',以防 cron 在外部执行。但是,日志没有显示任何远程IP,并且除了我怀疑它正在运行多次之外,没有提供任何线索。

2012-05-02 21:57:01 - /cron_custom_alerts.php EXECUTED BY 
2012-05-02 21:57:47 - /cron_custom_alerts.php EXECUTED BY 
2012-05-02 21:57:53 - /cron_custom_alerts.php EXECUTED BY 
2012-05-02 21:58:01 - /cron_custom_alerts.php EXECUTED BY 
2012-05-02 21:58:48 - /cron_custom_alerts.php EXECUTED BY 
2012-05-02 21:58:54 - /cron_custom_alerts.php EXECUTED BY 
2012-05-02 21:59:01 - /cron_custom_alerts.php EXECUTED BY 
2012-05-02 21:59:47 - /cron_custom_alerts.php EXECUTED BY 
2012-05-02 21:59:53 - /cron_custom_alerts.php EXECUTED BY 
2012-05-02 22:00:01 - /cron_custom_alerts.php EXECUTED BY

他们似乎以三批为一组运行。当我输入 crontab 并注释掉一个条目时,它将其减少到两个!所以显然,在某处还有两个隐藏的工作在调用这个脚本,但它无法通过crontab -e

如果我可以通过 PHP 做更多的日志记录,我对此持开放态度,但我真的在能够调查触发此脚本执行的原因方面遇到了障碍。

答:访问日志表明脚本正在外部访问,而不是由任何内部 cron 作业访问。其他服务器通过 htaccess 拒绝被阻止执行 cron。

cron 通常是一个写得很好的软件,不会做这种深奥的事情。如果是这样,你不会是唯一一个经历它的人。至少作为 root 用户,您可以看到系统上的所有 crontab 条目。

禁用 cronjob,看看它是否仍然被执行。如果是,请使用网络服务器的访问日志跟踪这些 HTTP 请求的来源(尤其是它们每分钟发生一次(。阻止这些请求。