说一下Supervisor进程守护监控

应用场景

工作中可能要写一些cli脚本,需要后台运行,一般会用 nohup command &

nohup /usr/bin/php /www/test.php >> /var/log/test.log 2>&1 &

但这样会有一些问题,不能监控进程状态,异常退出时不能自动重启,这时候 supervisor 是更好的选择

注意:像nginx, mysql, php-fpm等,还是推荐系统级的systemctl

安装

#centos/redhat/fedora
yum install supervisor

#Debian/Ubuntu可通过apt安装
apt-get install supervisor

#pip安装
pip install supervisor

#easy_install安装
easy_install supervisor

#启动
supervisord -c /etc/supervisor/supervisord.conf

配置

新建一个脚本的配置文件

vi /etc/supervisor/conf.d/demo.conf
;demo表示程序名称
[program:demo]
;需要执行的命令
command=php demo.php
;命令执行的目录
directory=/var/www/demo/beanstalkd/demo0/
;环境变量
environment=PATH="/usr/local/bin/"
;哪个用户运行
user=root
;是否自启动
autostart=true
;是否自动重启
autorestart=true
;自动重启时间间隔,单位秒
startsecs=3
;错误日志文件
stderr_logfile=/tmp/demo.err.log
;输出日志文件
stdout_logfile=/tmp/demo.out.log

保存后reload一下,使生效
supervisorctl reload

脚本文件 demo.php

<?php

$i = 0;
while(true) {
    $i++;
    echo $i, PHP_EOL;
    sleep(1);
}

web界面

vi /etc/supervisor/supervisord.conf

;增加
[inet_http_server]
port=0.0.0.0:9001
username=admin
password=123456

保存后reload一下,使生效
supervisorctl reload

然后访问 http://localhost:9001/,即可看到如下界面

常用命令

#启动进程
supervisorctl start xxx
#重启进程
supervisorctl restart xxx
#重启所有属于名为group的分组进程
supervisorctl stop group
#停止全部进程
supervisorctl stop all
#载入最新配置的文件
supervisorctl reload
#根据最新的配置文件,启动新配置或有改动的进程
supervisorctl update
#查看日志文件
/var/log/supervisor

正文完