LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 2095|回复: 8

如何保持程序一直运行?

[复制链接]
发表于 2010-6-23 08:03:45 | 显示全部楼层 |阅读模式
想要让一个管理程序一直运行,即使被关闭了,也会自动重新运行这个程序。我想能不能监视进程,如该程序不在进程中,自动运行该程序。

请教中……谢谢。
发表于 2010-6-23 09:29:32 | 显示全部楼层
inittab
回复 支持 反对

使用道具 举报

发表于 2010-6-23 10:08:25 | 显示全部楼层
#!/bin/bash
##Name: a.sh
if [ -z `ps ax|grep zzz|grep -v grep` ];then
   ./zzz
fi
sleep 1
./a.sh

####后台运行a.sh,每秒检查一次zzz是都运行,没有就执行他
#./a.sh &
回复 支持 反对

使用道具 举报

发表于 2010-6-23 11:47:02 | 显示全部楼层
Post by Mr.Linux;2098205
想要让一个管理程序一直运行,即使被关闭了,也会自动重新运行这个程序。我想能不能监视进程,如该程序不在进程中,自动运行该程序。
请教中……谢谢。

一般做法是在启动脚本里面用 while 1 之类的循环把程序包起来。

这样程序一退出,就会进入 while 的下一个循环,继续启动。

如果是监视进程的话,就比较简单,你把该程序作为你的子进程启动,这样一旦进程退出,你就会收到 SIGCHILD 消息。在该信号处理函数中重新启动子进程即可。


通常不推荐使用轮询,因为程序大多数时间是在正常运行,轮询会不必要的消耗系统资源。而我上面两种方法都是被动通知,相关代码仅仅在程序退出的那一瞬间才触发。
回复 支持 反对

使用道具 举报

发表于 2010-6-23 14:41:34 | 显示全部楼层
Post by poet;2098272
一般做法是在启动脚本里面用 while 1 之类的循环把程序包起来。

这样程序一退出,就会进入 while 的下一个循环,继续启动。

如果是监视进程的话,就比较简单,你把该程序作为你的子进程启动,这样一旦进程退出,你就会收到 SIGCHILD 消息。在该信号处理函数中重新启动子进程即可。


通常不推荐使用轮询,因为程序大多数时间是在正常运行,轮询会不必要的消耗系统资源。而我上面两种方法都是被动通知,相关代码仅仅在程序退出的那一瞬间才触发。


嗯,不错,这个想法,思路都是对的。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-6-26 13:16:05 | 显示全部楼层
Post by dwl301;2098249
#!/bin/bash
##Name: a.sh
if [ -z `ps ax|grep zzz|grep -v grep` ];then
   ./zzz
fi
sleep 1
./a.sh

####后台运行a.sh,每秒检查一次zzz是都运行,没有就执行他
#./a.sh &


谢谢,收下做参考
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-6-26 13:35:18 | 显示全部楼层
Post by poet;2098272
一般做法是在启动脚本里面用 while 1 之类的循环把程序包起来。

这样程序一退出,就会进入 while 的下一个循环,继续启动。

如果是监视进程的话,就比较简单,你把该程序作为你的子进程启动,这样一旦进程退出,你就会收到 SIGCHILD 消息。在该信号处理函数中重新启动子进程即可。


通常不推荐使用轮询,因为程序大多数时间是在正常运行,轮询会不必要的消耗系统资源。而我上面两种方法都是被动通知,相关代码仅仅在程序退出的那一瞬间才触发。


不是很理解该使用的语句,想学习,能否写一下这个脚本,谢谢。
回复 支持 反对

使用道具 举报

发表于 2010-7-1 00:13:25 | 显示全部楼层
while [ 1 ]
do
#运行程序
done
回复 支持 反对

使用道具 举报

发表于 2010-8-17 16:23:40 | 显示全部楼层
用upstart
自己编辑文件放到/etc/init/下,参照现成的写
/etc/inittab已经被废了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表