我在 crontab 中有 4 个脚本在服务器启动时启动。大约 12 小时后,一些脚本抛出异常并停止运行。此时,我希望我的服务器再次启动脚本,以便每个脚本始终运行。
我可以跑:
ps ax | grep python
我知道通常是哪一个停止运行。
答案1
对我来说,看起来您正试图解决一个错误的问题。
如果您的脚本充当守护进程并且需要一直运行,那么它不应该定期崩溃并期望重新启动。当然,意外崩溃可能会发生,是的,有工具可以监控服务并在服务失败时重新启动它们。但是,如果某个服务每天崩溃一两次,那么您最好查看它出了什么问题,而不是简单地重新启动它并假装它没问题。
如果您的脚本作为批处理作业运行并且由于某种原因无法完成其任务,那么它不应该只是引发异常,退出并等待重新启动。
找到脚本崩溃的原因并修复它。如果发生意外故障,请使用监控软件重新启动它,但不要将其作为定期崩溃的修复。
答案2
您正在寻找的解决方案调用看门狗。顺便说一句。Linux 也使用看门狗守护进程来确保服务正常运行。
关于它的讨论和脚本解决方案的片段可以在这里找到: https://unix.stackexchange.com/questions/55318/watchdog-script-to-keep-an-application-running
4 您需要了解并解决问题的步骤:您的脚本应该写入一个 pid 文件。在脚本中:
echo $$ >PIDFILE
也许您可以与信号量进行交互,以便在不杀死它的情况下按需停止它。
if [ -f sript.stop ] ; then
exit
fi
Whatchdog 作为单独的脚本在 cron 中每分钟启动一次,并执行以下操作:
获取 pidfile 的内容并检查是否有有效的进程正在运行。!注意,PID 和运行文件的进程应该匹配。不要杀死稍后启动的可能具有相同 PID 的进程……或者匹配的 PID 334 也可能匹配 52334 或 53342……不要陷入这个陷阱。
如果它没有运行,请删除 pidfile 并重新启动脚本。这个简单的功能也可以包含在脚本中。
但正如 grekaius 所说,尝试找出脚本停止的原因。对于某些 Java 应用程序...进程可能会停止,这很正常。