调查一个程序,如果它死了就做点什么?

时间:2014-11-14 16:15:58

标签: bash pid

我有一个在Raspberry Pi上运行的程序。有没有办法让我编写一个总是检查程序是否正在运行的bash脚本?如果程序崩溃,脚本会执行某些操作(例如,通过电子邮件发送给我)。

1 个答案:

答案 0 :(得分:2)

最简单的实现如下:

#!/bin/bash

while true; do
  program "$@"
done

基本上,脚本运行program,然后在退出时立即重新运行它。它简单,高效,稳健。

如果您希望脚本观察已经运行的内容并重新启动它,那么您将面临更艰巨的任务。你必须grep ps或类似的输出,这意味着模式,文本操作,可能还有一些魔术。它还意味着定期轮询,效率低下,和/或意味着一个流程退出,然后新流程开始之间会有明显的差距。

或者,您可以拥有一个" program.pid"文件在哪里,这会让生活变得更轻松,但你仍然需要检查具有给定PID的过程是否应该是它应该是的程序,而且它仍然是关于轮询的。


除此之外:您可能会考虑将程序设置为系统服务。我不确定Rasbian使用什么,但Upstart和Systemd都可以处理必须在死后重新启动的服务。