我的一位客户在运行 Ubuntu 的 VPS 上托管了一个 Magento 网站。
他们抱怨说没有收到任何销售电子邮件的副本 - 在调查了许多其他事情之后,我发现服务器上的 cron 作业大约在两个月前就卡住了。
我终止了 cron 作业,这导致 Magento 重新排队最新命令,然后瞧 - 在接下来的 30 秒内收到了 7 封销售电子邮件!
有没有办法可以设置 cron 服务每天早上 3 点自动重启 - 或者类似的东西?这似乎可以阻止这个问题再次出现......
答案1
重新启动 cron ( systemctl restart cron.service
) 不会有帮助:挂起(或仍在运行)的进程将重新成为父进程并继续运行(或继续挂起)。您需要停止排队进程本身。
一简单的方法是通过timeout
命令。假设您运行一个magento_que
每 5 分钟调用一次的程序,并且希望它最多运行 3 分 30 秒:
*/5 * * * * /usr/bin/timeout 3.5m /path/to/magento_que
3.5 分钟后,magento_que
将发送 SIGTERM(类似于 CTRL-C)。如果它没有响应,您可以定义另一个信号或结合使用--kill-after=DURATION
:
*/5 * * * * /usr/bin/timeout --kill-after=10s 3.5m /path/to/magento_que
现在magento_que
将在 3.5 分钟后发送 SIGTERM,如果它拒绝停止,则 10 秒后将发送 SIGKILL(它无法拦截)。
然而,这只是一个解决方法,我应该说我更愿意找到真实的程序挂起的原因。