前言
在 web 应用部署到线上后,需要保证应用一直处于运行状态,在遇到程序异常、报错等情况,导致 web 应用终止时,需要保证程序可以立刻重启,继续提供服务。
所以,就需要一个工具,时刻监控 web 应用的运行情况,管理该进程。
Supervisor 就是解决这种需求的工具,可以保证程序崩溃后,重新把程序启动起来等功能。
简介
Supervisor 是一个用 Python 写的进程管理工具,可以很方便的用来在 UNIX-like 系统(不支持 Windows)下启动、重启(自动重启程序)、关闭进程(不仅仅是 Python 进程)
环境
Centos7
安装
wget https://sec.ly.com/mirror/get-pip.py -O /tmp/get-pip.py python /tmp/get-pip.py pip install supervisor
配置
# echo_supervisord_conf > /etc/supervisord.conf //生成一个示例配置文件,配置文件如下 #cat /etc/supervisord.conf |grep -v "^;"|grep -v "^$" [unix_http_server] file=/var/supervisor/supervisor.sock ; the path to the socket file [supervisord] logfile=/var/log/supervisor/supervisord.log ; main log file; default $CWD/supervisord.log logfile_maxbytes=50MB ; max main logfile bytes b4 rotation; default 50MB logfile_backups=10 ; # of main logfile backups; 0 means none, default 10 loglevel=info ; log level; default info; others: debug,warn,trace pidfile=/var/supervisor/supervisord.pid ; supervisord pidfile; default supervisord.pid nodaemon=false ; start in foreground if true; default false minfds=1024 ; min. avail startup file descriptors; default 1024 minprocs=200 ; min. avail process descriptors;default 200 [rpcinterface:supervisor] supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface [supervisorctl] serverurl=unix:///var/supervisor/supervisor.sock ; use a unix:// URL for a unix socket [include] files = /etc/supervisor/conf.d/*.conf
举例
3添加radiusd到supervisor启动 # vim/etc/supervisor/conf.d/radiusd.conf,添加如下内容 [program:radiusd] command=radiusd -f autostart=true
autorestart=True
添加完成后执行
#supervisorctl update 更新下配置文件,即可启动radiusd,注意启动命令是radiusd -f 而不是radiusd
提示:虽然在写command命令时跟在shell环境下一样,但是需要注意的是,如果你想用supervisord来托管你的程序,必须要让你的程序在前台启动,不允许以daemon的形式启动,比如php-fpm,command命令就需要这么写
command=/usr/local/php/sbin/php-fpm --nodaemonize -c /usr/local/php/etc/php-fpm.conf
否则会报错 如下;
[[email protected] conf.d]# supervisorctl status
php-fpm FATAL Exited too quickly (process log may have details)
附:supervisor常见命令
3 supervisor常见命令
更新新的程序配置到supervisord
supervisorctl update
重新加载supervisord的配置文件
supervisorctl reload
启动某个进程(program_name=你配置中写的程序名称)
supervisorctl start program_name
查看正在守候的进程
supervisorctl satus
停止某一进程 (program_name=你配置中写的程序名称)
pervisorctl stop program_name
重启某一进程 (program_name=你配置中写的程序名称)
supervisorctl restart program_name
停止全部进程
supervisorctl stop all
参考资料
https://stackoverflow.com/questions/32965149/supervisord-php5-fpm-exited-too-quickly