我的 cronjob 每 15 分钟重复一次,但我不知道为什么。
以下是替换了实际命令的 crontab 文件:
# m h dom mon dow command
# Comment
0 9 * * * command arg1
0 14 * * * command arg1
0 19 * * * command arg1
0 1 * * * command arg1
#0 19 * * * command arg1
#0 22 * * * command arg1
我修改了 crontab 并重新启动了服务器。一切都按预期启动。但它每 15 分钟重复一次命令。我的命令是一个使用 wget 启动 Web 服务的 sh 脚本。
我感觉 crontab 会在 15 分钟后重复失败的命令(wget 大部分时间都会失败,因为 Web 服务需要超过 1 分钟才能执行)。我说得对吗?如何修复这个问题?
答案1
cron 不会重新尝试执行作业。它只是按计划运行命令。它不一定关心命令是成功还是失败。cron 也不会施加任何类型的超时。
您可能需要检查您的 syslog 和 /var/log/cron(至少在 RedHat 风格的系统上是这样的)。
此外,如果拥有 crontab 的用户没有收到有关 wget 命令输出的电子邮件消息,请插入[电子邮件保护]为了更好地了解执行命令时发生的情况。
看:
man 5 crontab
...有关可以为用户的 crontab 配置的一些其他设置的更多详细信息。
来自 WGET 手册页
在与网络交互时,Wget 可以检查超时情况,如果操作耗时过长,则会中止操作。这可以防止读取挂起和无限连接等异常情况。 默认情况下启用的唯一超时是 900 秒的读取超时。 将超时设置为 0 会将其完全禁用。除非您知道自己在做什么,否则最好不要更改默认超时设置。
答案2
我很懒,所以只快速回答两个问题。
第一个是查看 /etc/cron* 看看是否有一些有趣的东西可以回答你的问题。
第二个是查看 ps aux 以查看是否存在一些您不知道的进程,并且可能每 15 分钟启动一次您的脚本。
然后免费获得第三个,您可以修改脚本以告诉(日志)它是从谁启动的,也许在开头添加类似 ps aux | grep $PPID > /tmp/your_script_parent_process.log 的内容。
我原谅了。可能还有其他答案,也许该命令是通过另一个用户的 crontab 执行的。
安德里亚
答案3
我发现默认情况下,wget 在失败时会重复请求。添加“-t 1”或“--times=1”解决了问题