安装
Supervisor 是 Linux 操作系统下中的一个进程监控器,它可以在 queue:work 挂掉时自动重启之。在 Ubuntu 上安装 Supervisor,你可以使用如下命令:
sudo apt-get install supervisor
配置
[program:erp-goodsin-queue] user = nobody command = php cli.php request_uri=/job/erp/goodsinqueue directory = /var/www/retail #process_name = msgsend numprocs = 1 autostart = true autorestart = true stdout_logfile = /var/log/supervisor/goodsinqueue.log stdout_logfile_maxbytes = 10MB stderr_logfile = /var/log/supervisor/goodsinqueue.error.log stderr_logfile_maxbytes = 10MB
command=/root/miniconda3/bin/uwsgi –ini uwsgib.ini ; 程序启动命令
directory=/root/xxxx/automobile
autostart=True ; 在supervisord启动的时候也自动启动
startsecs=10 ; 启动10秒后没有异常退出,就表示进程正常启动了,默认为1秒
autorestart=true ; 程序退出后自动重启,可选值:[unexpected,true,false],默认为unexpected,表示进程意外杀死后才重启
startretries=3 ; 启动失败自动重试次数,默认是3
user=root ; 用哪个用户启动进程,默认是root
priority=999 ; 进程启动优先级,默认999,值小的优先启动
redirect_stderr=true ; 把stderr重定向到stdout,默认false
stdout_logfile_maxbytes=20MB ; stdout 日志文件大小,默认50MB
stdout_logfile_backups = 20 ; stdout 日志文件备份数,默认是10
; stdout 日志文件,需要注意当指定目录不存在时无法正常启动,所以需要手动创建目录(supervisord 会自动创建日志文件)
stdout_logfile=/root/yangdefeng/touna/automobile/logs/automobile.out
loglevel=debug ;loglevel 指定了日志的级别,用 Python 的 print 语句输出的日志是不会被记录到日志文件中的,需要搭配 Python 的 logging 模块来输出有指定级别的日志。
stopasgroup=true ;默认为false,进程被杀死时,是否向这个进程组发送stop信号,包括子进程
killasgroup=true ;默认为false,向进程组发送kill信号,包括子进程
管理
root@ebs-26932:~# service supervisor status supervisor.service - Supervisor process control system for UNIX Loaded: loaded (/lib/systemd/system/supervisor.service; enabled; vendor preset: enabled) Active: active (running) since Thu 2019-08-22 02:17:31 UTC; 4s ago Docs: http://supervisord.org Process: 22046 ExecStop=/usr/bin/supervisorctl $OPTIONS shutdown (code=exited, status=0/SUCCESS) Main PID: 22063 (supervisord) Tasks: 1 (limit: 2319) CGroup: /system.slice/supervisor.service └─22063 /usr/bin/python /usr/bin/supervisord -n -c /etc/supervisor/supervisord.conf 8月 22 02:17:31 ebs-26932 systemd[1]: Started Supervisor process control system for UNIX. 8月 22 02:17:31 ebs-26932 supervisord[22063]: 2019-08-22 02:17:31,635 CRIT Supervisor running as root (no user in c 8月 22 02:17:31 ebs-26932 supervisord[22063]: 2019-08-22 02:17:31,637 WARN No file matches via include "/etc/superv 8月 22 02:17:31 ebs-26932 supervisord[22063]: 2019-08-22 02:17:31,763 INFO RPC interface 'supervisor' initialized 8月 22 02:17:31 ebs-26932 supervisord[22063]: 2019-08-22 02:17:31,764 CRIT Server 'unix_http_server' running withou 8月 22 02:17:31 ebs-26932 supervisord[22063]: 2019-08-22 02:17:31,765 INFO supervisord started with pid 22063
supervisorctl 是 supervisord的命令行客户端工具
supervisorctl status:查看所有进程的状态 supervisorctl stop es:停止es supervisorctl start es:启动es supervisorctl restart es: 重启es supervisorctl update :配置文件修改后可以使用该命令加载新的配置 supervisorctl reload: 重新启动配置中的所有程序