Chinaunix

标题: 如何做到进程死掉后自动重启? [打印本页]

作者: No.6    时间: 2008-06-19 16:28
标题: 如何做到进程死掉后自动重启?
现在写了一个服务程序(守护进程)。但是有时会因为一些意外情况挂掉。所以要有一种保护措施,就是确保服务进程挂了以后还能启动起来。


想了些办法,一个是开一个进程监视这个服务进程,一旦发现挂了,自动启动他(有点像病毒~~~~不过绝对不是)但是没有找到查找进程相关函数或者相关文件存放的位置。

二一个就是通过信号,我觉得如果进程刮掉了应该会产生一些信号,如果修改这些信号的默认操作为重新启动进程,哪么进程就可以做到自己救自己,这种方法要比前一个省资源,但是还不知道有没有这样的信号产生呢。所以一会儿看看实在是查不到 查找进程的函数的话就查查这个。

我暂时就想到这些。不知道各位高手是如何做的。希望大家提供一些信息。提前谢谢各位了。
作者: wanjunq    时间: 2008-06-19 16:35
写一个脚本加到cron里每秒检测一次,如果不存在就启动
作者: No.6    时间: 2008-06-19 16:58
原帖由 wanjunq 于 2008-6-19 16:35 发表
写一个脚本加到cron里每秒检测一次,如果不存在就启动

这个方法不错啊。但是还要依赖cron啊 最好能尽量少依赖一些东西。
作者: 77h2_eleven    时间: 2008-06-19 17:02
看门狗
作者: dpsuffix    时间: 2008-06-19 17:02
fork出来执行你的进程,然后等待SIGCHLD
作者: No.6    时间: 2008-06-19 17:07
原帖由 77h2_eleven 于 2008-6-19 17:02 发表
看门狗

有点那个意思。能具体些吗?
作者: No.6    时间: 2008-06-19 17:15
原帖由 dpsuffix 于 2008-6-19 17:02 发表
fork出来执行你的进程,然后等待SIGCHLD

谢谢你的信息。刚刚查了一下阿,这个信号是在子进程终止时返回給父进程的,父进程可以截获这个消息,然后执行再启动是吧。不知道我理解的意思对吧。这个信号只要是子进程有异常都会产生这个信号吗 还是只有子进程挂掉的时候
作者: Smeagol    时间: 2008-06-19 17:19
用fork的话,父进程挂了还是会完蛋的,建议还是用cron。
作者: No.6    时间: 2008-06-19 17:21
原帖由 Smeagol 于 2008-6-19 17:19 发表
用fork的话,父进程挂了还是会完蛋的,建议还是用cron。

恩 但是创建成守护进程的时候好像要杀掉父进程的。所以按目前的状况,没有父进程啊。

cron那个我还不是很了解,马上去了解去。但是这样就依赖cron了。

就没有再起一个程序负责监控的解决办法 或者更好的办法。有些过服务程序的朋友多提宝贵意见啊
作者: bdw    时间: 2008-06-19 17:21
daemontools
What is it?
daemontools is a collection of tools for managing UNIX services.

supervise monitors a service. It starts the service and restarts the service if it dies. Setting up a new service is easy: all supervise needs is a directory with a run script that runs the service.

http://cr.yp.to/daemontools.html
作者: Smeagol    时间: 2008-06-19 17:25
原帖由 No.6 于 2008-6-19 17:21 发表

恩 但是创建成守护进程的时候好像要杀掉父进程的。所以按目前的状况,没有父进程啊。

cron那个我还不是很了解,马上去了解去。但是这样就依赖cron了。

就没有再起一个程序负责监控的解决办法 或者更好的 ...


呵呵,在守护进程中还可以自己再fork啊,就是再增加一级
作者: No.6    时间: 2008-06-19 17:34
原帖由 bdw 于 2008-6-19 17:21 发表
daemontools
What is it?
daemontools is a collection of tools for managing UNIX services.

supervise monitors a service. It starts the service and restarts the service if it dies. Setting up a ...

恩~~~~  早看到你这帖子我就不去问朋友了~~~~太感动
刚刚还想上来跟大家分享一下呢。谢谢bdw了~~~




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2