进程终止后如何自动重启?


11

我有一个golang程序,它在Debian Squeeze盒上终止后要重新启动。事情是在Apache 2 mod_proxy设置背后提供HTTP服务。我不认为该过程会失败,但是我想对此有所保证。

在Ubuntu上,我会使用upstart来保持该进程的生命。Debian不喜欢Upstart,因为它是一个init替代品。

是否有一种替代方法可以在终止后重新启动一个或多个进程,该进程可在Squeeze上运行并与init配合使用?


您能再说一遍您的问题吗?您是否要在终止后重新启动进程?
mailq

如果发生故障或终止,我想自动重启进程。
删除

2
传统的init程序正是这样做的。人们为什么认为使用init来运行shell脚本并调用一个shell脚本来启动另一个可以执行相同操作的进程,但是又没有自动的内核崩溃和重新启动(如果该进程失败)的想法,这完全是我无法理解的。
西蒙·里希特

这是一个公平的观点。我还将研究仅使用init的情况。我正在使用dpkg打包软件,因此创建初始化脚本并不难。
删除

Answers:


10

最好的方法是daemontools。它们使您可以监视和重新生成进程。

请参阅其网站上的文档:http : //cr.yp.to/daemontools.html


1
谢谢-这就是我所追求的。DJB =良好。我实际上应该记得花5年时间来维护qmail时存在的情况!
删除

和我一样,除了我过去经常照顾djbdns。
mr.b


2

监督或监控有利于保持单个进程的生命。由于您要求保持“一个或多个”进程正常运行,因此我想插入supervisor。管理单个流程肯定是过大的,但是如果您需要跟踪多个流程,那可能就是您的事。


2

一种选择是使用/etc/inittab而不是将脚本放入/etc/init.d/

您只需添加以下格式的条目:

<jobname>:<runlevels>:respawn:<command>

不幸的是,这意味着您无法使用正常的启动/停止/重新启动init命令,但应确保脚本始终在运行。


2

处理流程重新启动的交叉分发方式是使用cron和一个简单的脚本。您可以在此处查看文章如何在Linux中保持作业运行

该脚本看起来像

#!/bin/bash 
# make-run.sh 
# make sure a process is always running.  
# Add the following to the crontab (i.e. crontab -e)
# */5 * * * * /home/path_to_make_run/make-run.sh

process=servermonitoringhq 
makerun="/home/path_to_the_job_you_want_running/runjob.sh"  

if pgrep $process > /dev/null         
then                 
  exit         
else         
  $makerun &         
fi 
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.