3

我有一个似乎每分钟运行一次以上的 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。

4

1 回答 1

0

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

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

于 2012-05-06T11:07:11.993 回答