我有一个在Raspberry Pi上运行的程序。有没有办法让我编写一个总是检查程序是否正在运行的bash脚本?如果程序崩溃,脚本会执行某些操作(例如,通过电子邮件发送给我)。
答案 0 :(得分:2)
最简单的实现如下:
#!/bin/bash
while true; do
program "$@"
done
基本上,脚本运行program
,然后在退出时立即重新运行它。它简单,高效,稳健。
如果您希望脚本观察已经运行的内容并重新启动它,那么您将面临更艰巨的任务。你必须grep ps
或类似的输出,这意味着模式,文本操作,可能还有一些魔术。它还意味着定期轮询,效率低下,和/或意味着一个流程退出,然后新流程开始之间会有明显的差距。
或者,您可以拥有一个" program.pid"文件在哪里,这会让生活变得更轻松,但你仍然需要检查具有给定PID的过程是否应该是它应该是的程序,而且它仍然是关于轮询的。
除此之外:您可能会考虑将程序设置为系统服务。我不确定Rasbian使用什么,但Upstart和Systemd都可以处理必须在死后重新启动的服务。