首页 > 代码库 > 进程管理工具Supervisor的安装及使用

进程管理工具Supervisor的安装及使用

  需求:有一个进程需要每时每刻不断的跑,但是这个进程又有可能由于各种原因有可能中断。当进程中断的时候我需要他能自动重启,保证服务一直在跑着。基于整个需求,一开始想的是起一个脚本,监听该服务的端口,一旦发现端口占用被解除,立即重新执行命令。但是后来发现linux已经有了类似的东西,即今日的主角Supervisor:

  安装(Ubuntu)

sudo apt-get install supervisor

  可以进入paython测试是否能import supervisor 来确定是否已经装好。

  配置

  安装好supervisor后就可以编写配置文件了。配置文件放在/etc/supervisor/conf.d/目录下,最好一个进程对应一个.conf文件。
  配置文件参数说明:

[program: test]
command=xxxxxxxx  ;如果有多条命令,可以写入shell脚本再在这里调用
directory=xxxxx        ;执行命令时切换到的目录
user=xxxx ;执行命令所用的linux用户身份
autorestart=true    ;是否自动重启
autostart=true ;启动supervisor时是否自行启动该程序
redirect_stderr=true    ;如果为true则将stderr发送到stdout相应的log文件中去
stdout_logfile=/path/to/logfile ;制定stdout的输出文件
stdout_logfile_maxbytes=10MB    ;限定logfile的大小, 默认为50M
stdout_logfile_backups=10 ;保存logfile的最大数目,如果操作这个数目则对最早的logfile进行覆盖,默认为10
environment=A="1", B="2" ;设置环境变量,这里可以保存运行程序需要的参数 

  我要的功能非常简单,仅做了如下配置

[program: server]
command=python /home/zxchen/server.py ;
autorestart=true ;
autostart=true ;

  启动服务

sudo supervisorctl reread     #成功提示:server: available
sudo supervisorctl reload     #成功提示:Restarted supervisord
sudo supervisorctl start app  #如果服务没有启动时可以试试这个指令

  检验

lsof -i:端口号 #查看该端口状态
kill -9 PID   #kill掉这个进程

  再次查看端口状态,发现端口上服务的PID已改变,即成功。

 

进程管理工具Supervisor的安装及使用