2011-08-24 126 views
1

我有一个程序作为守护进程运行,使用C命令fork()。它创建一个在后台运行的新实例。主要实例在那之后存在。如何编写bash脚本以重新启动服务?

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

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

谢谢。

+0

这似乎更像是一个问题要问http://superuser.com/或http://serverfault.com/也许... –

+0

是很常见的守护进程将它们的PID写入文件,如/var/run/syslog.pid。如果你的话,你的脚本可以使用它。 –

回答

1

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

0

创建每隔几分钟运行(或任何你舒服),并做了这样的cron作业:使用任何您建议的方法

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

is_script_stopped.sh。如果你的脚本被停止,cron会评估你的脚本,如果没有,它不会。

0

为了这个问题,你在标题中给:

这个简单的无限循环将尽快重新启动yourProgram因为它失败:

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

如果你的程序依赖的资源,这可能会失败,从博的问题

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

:失败的每秒百万次时,它会是明智的,插入一个短暂的停顿,以避免,它将捕捉所有的系统资源dy您的帖子:

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

如果您ps有C选项(如Linux的PS),你更希望在ps ax | grep组合。

ps -C yourProgram