V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
aruisi
V2EX  ›  Linux

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

  •  
  •   aruisi · 2015-03-18 17:21:33 +08:00 · 3997 次点击
    这是一个创建于 3329 天前的主题,其中的信息可能已经有所发展或是发生改变。
    有个进程每隔四五天就意外终止了,有什么办法可以防止他结束运行?
    18 条回复    2015-03-21 10:52:52 +08:00
    wy315700
        1
    wy315700  
       2015-03-18 17:24:26 +08:00   ❤️ 1
    用一个监控系统监控着,如果发现意外终止直接重启

    比如 systemd initd 什么的
    155
        2
    155  
       2015-03-18 17:26:19 +08:00   ❤️ 1
    systemd、upstart、supervisor托管进程自动重启都可以, 但是我建议你最好打上log看看到底因为什么原因挂的.
    chevalier
        3
    chevalier  
       2015-03-18 17:31:17 +08:00
    supervisor +1
    joyeblue
        4
    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
        5
    est  
       2015-03-18 20:34:54 +08:00
    @joyeblue 有一个更好的思路是 test $(<myapp.pid) ,不存在就启动进程。
    qingh
        6
    qingh  
       2015-03-18 20:35:36 +08:00
    Monad
        7
    Monad  
       2015-03-18 20:41:00 +08:00   ❤️ 1
    取巧的办法是把这个进程当做某个进程的子进程启动,然后父进程waitpid,子进程挂了就继续起一个
    不过你最好查清楚为什么会异常退出。
    tigerstudent
        8
    tigerstudent  
       2015-03-18 22:39:10 +08:00
    楼上的解决方案都是保证进程运行,而楼主问的是如何防止进程结束运行。
    Tink
        9
    Tink  
       2015-03-18 22:41:00 +08:00
    看log
    guangwong
        10
    guangwong  
       2015-03-18 22:46:14 +08:00
    代码写好点!
    dant
        11
    dant  
       2015-03-18 23:20:11 +08:00 via iPhone
    @155 systemd 自带 log
    liangdi
        12
    liangdi  
       2015-03-18 23:39:02 +08:00 via iPhone
    找问题呀
    GeekGao
        13
    GeekGao  
       2015-03-18 23:42:13 +08:00
    敢问为啥意外终止了?
    lparam
        14
    lparam  
       2015-03-19 15:25:45 +08:00
    没办法防止,只能让你的进程死掉后,无人为干预重启。
    aruisi
        15
    aruisi  
    OP
       2015-03-19 20:06:55 +08:00
    @lparam
    @GeekGao
    @liangdi
    @dant
    @guangwong
    @Tink
    @tigerstudent
    @Monad
    @qingh
    @est
    @joyeblue
    @155
    @wy315700 感谢大家的回复。是shadowsocks libev的客户端进程,运行后长则十来天,短则四五天就意外终止了。
    wy315700
        16
    wy315700  
       2015-03-19 20:10:08 +08:00
    @aruisi shadowsocks libev没那么脆吧 我运行半年了没啥事
    aruisi
        17
    aruisi  
    OP
       2015-03-19 20:19:57 +08:00
    @wy315700 我运行的是客户端,不是服务端,我也不知道怎么回事,他会终止运行。
    qingh
        18
    qingh  
       2015-03-21 10:52:52 +08:00
    @aruisi 换python版的客户端试试,我用在Debian minimal下运行了一堆很稳定的。
    Btw, 服务端用的是libev的。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3408 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 10:59 · PVG 18:59 · LAX 03:59 · JFK 06:59
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.