起因:重启任务,但是log没有变更。
猜测:run.py 的进程不能被stop完全杀死
(zhekou) [root]# ps -aux|grep 'sources/run.py' | awk '{print $2}'|wc -l
50
kill run.py
(zhekou) [root]# ps -aux|grep 'sources/run.py' | awk '{print $2}'|wc -l
38
可以看到正常process数只有12。
stop 只能杀死主进程,没办法杀死子进程。
有时候用 Supervisor 托管的程序还会有子进程(如 Tornado),如果只杀死主进程,子进程就可能变成孤儿进程。通过这两项配置来确保所有子进程都能正确停止:
stopasgroup=true
killasgroup=true
Tips1
配置 | 解释参考 |
---|---|
;stopasgroup=false | 这个东西主要用于,supervisord管理的子进程,这个子进程本身还有子进程。那么我们如果仅仅干掉supervisord的子进程的话,子进程的子进程有可能会变成孤儿进程。所以咱们可以设置可个选项,把整个该子进程的整个进程组都干掉。 设置为true的话,一般killasgroup也会被设置为true。需要注意的是,该选项发送的是stop信号默认为false。。非必须设置。。 |
;killasgroup=false | 这个和上面的stopasgroup类似,不过发送的是kill信号 |
Tips 2: 后台进程
Supervisor 只能管理在前台运行的程序,所以如果应用程序有后台运行的选项,需要关闭。
更多可以做的: 进程数监控。防止supervisor进程异常
网友评论