我有一个程序作为守护进程运行,使用C命令fork()。它创建一个在后台运行的新实例。主要实例在那之后存在。如何编写bash脚本以重新启动服务?
什么是检查服务是否正在运行的最佳选择?我正在考虑:
- 使用程序的进程ID创建一个文件,并检查它是否正在使用脚本运行。
- 使用
ps | grep
在运行进程列表中查找程序。
谢谢。
我有一个程序作为守护进程运行,使用C命令fork()。它创建一个在后台运行的新实例。主要实例在那之后存在。如何编写bash脚本以重新启动服务?
什么是检查服务是否正在运行的最佳选择?我正在考虑:
ps | grep
在运行进程列表中查找程序。谢谢。
我认为用supervisord或其他过程控制系统来管理您的过程会更好。
创建每隔几分钟运行(或任何你舒服),并做了这样的cron作业:使用任何您建议的方法
/path/to/is_script_stopped.sh && /path/to/script.sh
写is_script_stopped.sh
。如果你的脚本被停止,cron会评估你的脚本,如果没有,它不会。
为了这个问题,你在标题中给:
这个简单的无限循环将尽快重新启动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
这似乎更像是一个问题要问http://superuser.com/或http://serverfault.com/也许... –
是很常见的守护进程将它们的PID写入文件,如/var/run/syslog.pid。如果你的话,你的脚本可以使用它。 –