请问如何防止进程意外终止?

2015-03-18 17:21:33 +08:00
 aruisi
有个进程每隔四五天就意外终止了,有什么办法可以防止他结束运行?
4010 次点击
所在节点    Linux
18 条回复
wy315700
2015-03-18 17:24:26 +08:00
用一个监控系统监控着,如果发现意外终止直接重启

比如 systemd initd 什么的
155
2015-03-18 17:26:19 +08:00
systemd、upstart、supervisor托管进程自动重启都可以, 但是我建议你最好打上log看看到底因为什么原因挂的.
chevalier
2015-03-18 17:31:17 +08:00
supervisor +1
joyeblue
2015-03-18 20:25:43 +08:00
以前的做法写个脚本,放到crontab 中每一分钟执行一次。

脚本内容:(只实现监控部分)

program_count=$(ps -ef |pgrep monitor_process_name)
if [[ $program_count lt 1 ]];
then
# 执行重新启动的脚本命令,例如可以写个op.sh
/data/svr/op.sh start
fi
est
2015-03-18 20:34:54 +08:00
@joyeblue 有一个更好的思路是 test $(<myapp.pid) ,不存在就启动进程。
qingh
2015-03-18 20:35:36 +08:00
Monad
2015-03-18 20:41:00 +08:00
取巧的办法是把这个进程当做某个进程的子进程启动,然后父进程waitpid,子进程挂了就继续起一个
不过你最好查清楚为什么会异常退出。
tigerstudent
2015-03-18 22:39:10 +08:00
楼上的解决方案都是保证进程运行,而楼主问的是如何防止进程结束运行。
Tink
2015-03-18 22:41:00 +08:00
看log
guangwong
2015-03-18 22:46:14 +08:00
代码写好点!
dant
2015-03-18 23:20:11 +08:00
@155 systemd 自带 log
liangdi
2015-03-18 23:39:02 +08:00
找问题呀
GeekGao
2015-03-18 23:42:13 +08:00
敢问为啥意外终止了?
lparam
2015-03-19 15:25:45 +08:00
没办法防止,只能让你的进程死掉后,无人为干预重启。
aruisi
2015-03-19 20:06:55 +08:00
@lparam
@GeekGao
@liangdi
@dant
@guangwong
@Tink
@tigerstudent
@Monad
@qingh
@est
@joyeblue
@155
@wy315700 感谢大家的回复。是shadowsocks libev的客户端进程,运行后长则十来天,短则四五天就意外终止了。
wy315700
2015-03-19 20:10:08 +08:00
@aruisi shadowsocks libev没那么脆吧 我运行半年了没啥事
aruisi
2015-03-19 20:19:57 +08:00
@wy315700 我运行的是客户端,不是服务端,我也不知道怎么回事,他会终止运行。
qingh
2015-03-21 10:52:52 +08:00
@aruisi 换python版的客户端试试,我用在Debian minimal下运行了一堆很稳定的。
Btw, 服务端用的是libev的。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/177808

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX