如果服务死了,如何编写bash脚本来重新启动服务?

时间:2011-08-24 17:51:04

标签: bash scripting daemon

我有一个使用C命令fork()作为守护进程运行的程序。它创建一个在后台运行的新实例。之后存在主要实例。

检查服务是否正在运行的最佳选择是什么?我在考虑:

  • 使用程序的进程ID创建一个文件,并检查它是否正在运行脚本。
  • 使用ps | grep在正在运行的进程列表中查找程序。

感谢。

3 个答案:

答案 0 :(得分:1)

我认为使用supervisord或其他过程控制系统来管理您的流程会更好。

答案 1 :(得分:0)

创建一个每隔几分钟运行一次的cron作业(或者你喜欢的任何东西)并执行以下操作:

/path/to/is_script_stopped.sh && /path/to/script.sh

使用您建议的任何方法编写is_script_stopped.sh。如果您的脚本被停止,cron将评估您的脚本,如果没有,它将不会。

答案 2 :(得分:0)

对于这个问题,你在标题中给出了:

这个简单的无限循环会在失败后立即重启你的程序:

#!/bin/bash
for ((;;))
do
   yourProgram
done

如果您的程序依赖于可能失败的资源,那么插入一个短暂的暂停是明智的,以避免在每秒数百万次失败时捕获所有系统资源:

#!/bin/bash
for ((;;))
do
   yourProgram
   sleep 1
done

来自帖子正文的问题:

  

检查服务是否正在运行的最佳选择是什么?

如果你的ps有一个-C选项(比如Linux ps),那么你会更喜欢ps ax | grep组合。

 ps -C yourProgram
相关问题