使用Supervisor 进行进程监控

安装

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: 重新启动配置中的所有程序