前言
服务器上运行项目时遇到某些脚本需要后台进程运行,并保证不被中断,之前都是通过nohup、&来实现,但还是会遇到终端的情况,很烦,所以找到了Supervisor。关于Supervisor网上的介绍大致如下:
Supervisor是用Python开发的一套通用的进程管理程序,能将一个普通的命令行进程变为后台daemon,并监控进程状态,异常退出时能自动重启。它是通过fork/exec的方式把这些被管理的进程当作supervisor的子进程来启动,这样只要在supervisor的配置文件中,把要管理的进程的可执行文件的路径写进去即可。也实现当子进程挂掉的时候,父进程可以准确获取子进程挂掉的信息的,可以选择是否自己启动和报警。supervisor还提供了一个功能,可以为supervisord或者每个子进程,设置一个非root的user,这个user就可以管理它对应的进程。
废话不多说了,开始教程。
1、安装supervisor
apt-get install supervisor
2、生成默认的配置文件
echo_supervisord_conf > /etc/supervisor/supervisord.conf
3、修改默认配置文件,指定配置文件规则及路径
修改配置文件最后部分,去掉","并设置为如下所示。
详细的配置及说明,请参考官方文档介绍。
[include]
files = /etc/supervisor/conf.d/*.conf ;可以指定一个或多个以.conf结束的配置文件
4、配置管理进程
创建进程配置文件(以KCPTUN为例)
vim /etc/supervisor/conf.d/kcptun.conf
配置内容如下:
[program:kcptun]
command = /home/kcptun/server_linux_amd64 -l :20013 -t 127.0.0.1:9310 --key Lzz_013942 --crypt salsa20 --mode fast
user= root
autostart = true
autorestart = true
5、启动Supervisor服务
supervisord -c /etc/supervisor/supervisord.conf
6、控制进程
supervisord启动成功后,可以通过supervisorctl客户端控制进程,启动、停止、重启。
supervisord
运行supervisorctl命令,不加参数,会进入supervisor客户端的交互终端,并会列出当前所管理的所有进程。
supervisorctl常用命令:
supervisorctl stop program_name 停止某个进程
supervisorctl start program_name 启动某个进程
supervisorctl restart program_name 重启某个进程
supervisorctl stop all 停止全部进程
supervisorctl reload 载入最新的配置文件,停止原有进程并按新的配置启动、管理所有进程
supervisorctl update 根据最新的配置文件,启动新配置或有改动的进程,配置没有改动的进程不会受影响而重启