我有一个似乎每分钟运行一次以上的 cron 作业,考虑到 linux 仅以分钟间隔处理,我不确定这怎么可能。这是我研究它的方法。
首先,我确认 /etc/cron.hourly、/etc/cron.daily 等中没有任何额外的条目……那里没有什么异常。
然后,我进入 /etc/crontab 以确保没有其他条目,什么都没有。
然后,我运行这个命令来查看所有用户的 crontab
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 deny 执行 cron。