Bash 监视一个程序,如果它死了,做些什么?

Bash 监视一个程序,如果它死了,做些什么?,bash,pid,Bash,Pid,我有一个程序运行在一个小树莓圆周率。我有没有办法编写一个bash脚本,总是检查程序是否正在运行?如果程序崩溃,脚本会执行某些操作(例如给我发电子邮件)。最简单的实现如下所示: #!/bin/bash while true; do program "$@" done 基本上,脚本运行程序,然后在退出时立即重新运行。它简单、高效、健壮 如果您想让脚本监视已经运行的内容并重新启动它,那么您将面临一个更困难的任务。您必须对ps的输出进行grep,或者类似的操作,这意味着模式、文本操作,可能还有一

我有一个程序运行在一个小树莓圆周率。我有没有办法编写一个bash脚本,总是检查程序是否正在运行?如果程序崩溃,脚本会执行某些操作(例如给我发电子邮件)。

最简单的实现如下所示:

#!/bin/bash

while true; do
  program "$@"
done
基本上,脚本运行
程序
,然后在退出时立即重新运行。它简单、高效、健壮

如果您想让脚本监视已经运行的内容并重新启动它,那么您将面临一个更困难的任务。您必须对
ps
的输出进行grep,或者类似的操作,这意味着模式、文本操作,可能还有一些魔术。它还意味着定期轮询,这是低效的,和/或意味着在一个进程退出和新进程启动之间存在明显的差距

或者,您可以在某个地方有一个“program.pid”文件,这会使您的工作更轻松,但是您仍然需要检查具有给定pid的进程是否是它应该是的程序,并且仍然是关于轮询的



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

是的,这是可能的,但如果bash脚本首先启动它,就更容易了。是吗?不,不是。一个脚本启动程序,另一个脚本在后台运行,检查第一个脚本启动的程序是否仍在运行。第一个脚本能否通过第二个脚本间接启动程序?#/bin/bash task();然后,使用这样一个脚本和正确计时的crontab就可以了。希望有帮助。谢谢!但我需要程序做的不仅仅是重新启动死掉的程序。它需要警告我,还有其他一些事情。假设我将程序PID保存在一个文件中,如何检查该文件中的PID是否正在运行?@Paolo look in
/proc/$PID