【问题标题】:Surveil a program, and do something if it dies? [closed]监视一个程序,如果它死了就做点什么? [关闭]
【发布时间】:2014-11-14 16:15:57
【问题描述】:

我有一个在小树莓派上运行的程序。我有什么办法可以编写一个始终检查程序是否正在运行的 bash 脚本?如果程序崩溃,脚本会做一些事情(例如给我发电子邮件)。

【问题讨论】:

  • 是的,这是可能的,但如果 bash 脚本首先启动它会更容易。是吗?
  • 不,它没有。一个脚本启动程序,另一个脚本在后台运行,检查第一个脚本启动的程序是否仍在运行。
  • 第一个脚本能否通过第二个脚本间接启动程序?
  • #!/bin/bash task() { echo "进程死亡。" } /bin/pidof if [[ $? -ne 0 ]];然后任务 fi 一个像这样的脚本和正确定时的 crontab 应该做。希望对您有所帮助。

标签: bash pid


【解决方案1】:

最简单的实现如下所示:

#!/bin/bash

while true; do
  program "$@"
done

基本上,该脚本运行program,然后如果它退出,则立即重新运行它。它简单、高效且强大。

如果您希望脚本监视已在运行的内容并重新启动它,那么您的任务就更艰巨了。您必须 grep ps 或类似的输出,这意味着模式、文本操作,可能还有一些魔法。这也意味着定期轮询,这是低效的,和/或意味着在一个进程退出和新进程启动之间会有明显的差距。

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


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

【讨论】:

  • 谢谢!但我需要该程序做的不仅仅是重新启动死掉的程序。它需要警告我,其他一些事情。假设我将程序 PID 保存在一个文件中,如何检查该文件中的 pid 是否正在运行?
  • @Paolo 查看/proc/$PID
猜你喜欢
  • 2011-05-12
  • 1970-01-01
  • 1970-01-01
  • 2013-06-07
  • 2015-06-27
  • 2010-11-04
  • 2017-02-09
  • 2012-11-07
  • 2015-01-12
相关资源
最近更新 更多