supervisor使用
使用场景
1. 自己写的程序,没有启动脚本
2. 程序运行后,得用nohup进行后台运行以及日志输出
3. 一台服务器里面有多个程序,而且有优先级
上述场景下对应的好处:
1. 帮助你拥有启动和关闭的操作接口
2. 日志除了stdout显示之外,还可以输出到指定文件
3. 几个程序运行在一个节点里面,可以进行优先级调整
安装:
yum install epel-release -y yum install supervisor -y
supervisor的常用命令:
supervisorctl status //查看所有进程的状态 supervisorctl stop msyql //停止msyql supervisorctl start msyql //启动msyql supervisorctl restart msyql //重启msyql supervisorctl reload //载入最新的配置文件,停止原来的所有进程并按新的配置启动管理所有进程; supervisorctl update //根据最新的配置文件,启动新配置或有改动的进程,配置没有改动的进程不会受影响而重启; 如果修改了 supervisorctl shutdown //停止supervisor进程 supervisord -c supervisor.conf 通过配置文件启动supervisor supervisorctl -c supervisor.conf status 查看supervisor的状态 supervisorctl -c supervisor.conf reload 重新载入配置文件 更新后可以选择重新载入 supervisorctl -c supervisor.conf start [all] | [appname] 启动指定/所有 supervisor管理的程序进程 supervisorctl -c supervisor.conf stop [all] | [appname] 关闭指定/所有 supervisor管理的程序进程 supervisorctl -c /etc/supervisord.conf shutdown 停止supervisor进程
supervisor管理mysql
[program:mysql] command=/usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/mydata --plugin-dir=/usr/local/mysql/lib/plugin --log-error=/mydata/localhost.localdomain.err --pid-file=/mydata/localhost.localdomain.pid --socket=/tmp/mysql.sock --port=3306 user=mysql
supervisor管理nginx
command=/usr/local/nginx/sbin/nginx -g "daemon off;" ;启动服务的command autostart = true ;在supervisord启动的时候这个服务也自动启动 startsecs = 5 ;启动5s后没有异常退出,就认为正常启动了 autorestart = true ;程序异常退出后自动重启 startretries = 3 ;启动失败几次之后就比启动了 user = root ;以那个用户的身份启动这个服务 redirect_stderr = true ;把stderr重定向到stdout,默认false stdout_logfile_maxbytes = 20MB ;stdout日志的大小 stdout_logfile_backups = 20 ;stdout日志保留多少份 stdout_logfile = /var/log/supervisor/nginx.log ;日志文件存放的位置
supervisor管理php
[program:php-fpm] command=/usr/local/php/sbin/php-fpm --fpm-config /usr/local/php/etc/php-fpm.conf --pid /usr/local/php/var/run/php-fpm.pid autostart=true user=root autorestart=true exitcodes=0,2,70 stopsignal=QUIT stopwaitsecs=2 startretries=5 redirect_stderr=true stdout_logfile=/var/log/supervisor/php-fpm.log 需要注意使用supervisor监护进程时,被监护的进程不能是守护进程。php需要修改/usr/local/php/etc/php-fpm.conf配置daemonize = no