安装supervisor
$ yum install -y supervisor
$ supervisord -v
3.1.4
安装配置
$ echo_supervisord_conf > /etc/supervisord.conf
安装配置
$ echo_supervisord_conf > /etc/supervisord.conf
修改配置
$ vim /etc/supervisord.conf
拖到代码最下面:
将注释的代码改成下面的目录 [include] files = /etc/supervisor/etc/*.conf
创建应用目录
mkdir -p /etc/supervisor /etc/supervisor/etc /etc/supervisor/log
创建脚本
vim /etc/supervisor/etc/redis_worker.conf
[program:redis_worker] command=/usr/local/redis5.0/redis-server /usr/local/redis5.0/redis.conf process_name=%(process_num)02d numprocs=20 user=root autostart=true autorestart=true startsecs=1 startretries=20 redirect_stderr=false stdout_logfile=/etc/supervisor/log/redis_worker.out.log stderr_logfile=/etc/supervisor/log/redis_worker.err.log
修改文件执行权限
$ chmod -R 0755 /etc/supervisord.conf
$ chmod -R 0755 /etc/supervisor
开启服务加载配置
$ supervisord -c /etc/supervisord.conf
$ supervisorctl update
$ supervisorctl reload
$ supervisorctl status
$ supervisorctl shutdown
若服务期间修改配置则使用update进行更新配置
$ supervisorctl reload
效果演示
$ supervisorctl reload 重新加载配置
$ supervisorctl status 查看脚本运行的状态
supervisor 配置文件:
/etc/supervisor.conf
[unix_http_server] file=/tmp/supervisor.sock ; unix socket文件,supervisorctl会使用 ;chmod=0700 ; socket文件权限 ;chown=nobody:nogroup ; socket文件所属用户和用户组 [inet_http_server] ; web管理界面 port=127.0.0.1:9001 ; 管理界面的IP和端口 username=admin ; 登陆管理界面的用户名 password=123456 ; 登陆管理界面的密码 [supervisord] logfile=/tmp/supervisord.log ; 日志文件 logfile_maxbytes=50MB ; 日志文件大小,为0表示不限制 logfile_backups=10 ; 日志文件备份数量,为0表示不备份 loglevel=info ; 日志级别,也可设置为 debug,warn,trace pidfile=/tmp/supervisord.pid ; PID文件路径 nodaemon=false ; 是否前台启动,为false表示守护进程方式 minfds=1024 ; 打开文件描述符的最小值 minprocs=200 ; 创建进程数的最小值 [supervisorctl] serverurl=unix:///tmp/supervisor.sock ; 通过 unix sokcet 连接supervisord ;serverurl=http://127.0.0.1:9001 ; 通过http方式连接supervisord [include] files = /etc/supervisord/confs/*.conf ; 包含其他配置文件,可以是.conf或.ini
我们需要把 [include] 前面的注释打开,并配置 files 的路径。
2.直接运行 supervisorctl status 报:
Error: Server requires authentication
For help, use /usr/local/bin/supervisorctl -h
因为你设置访问账号密码,所以只能先supervisorctl进去,在status。
需要先输入 supervisorctl 命令,输入用户名和密码进入,才能使用命令进行操作。
创建 files 中配置的目录。
mkdir -p /etc/supervisord/confs/
配置一个php脚本进程
我们在 /etc/supervisord/confs/ 目录下创建一个 demo.conf 文件。
;demo表示程序名称 [program:demo] ;需要执行的命令 command=php demo.php ;命令执行的目录 directory=/data/wwwroot ;环境变量 environment=PATH="/data/nmp/php/bin/" ;哪个用户运行 user=root ;是否自启动 autostart=true ;是否自动重启 autorestart=true ;自动重启时间间隔,单位秒 startsecs=3 ;错误日志文件 stderr_logfile=/tmp/demo.err.log ;输出日志文件 stdout_logfile=/tmp/demo.out.log
特别注意: 在一个conf下可以写多个脚本命令
例如:
[program:kr8851queue-csvsite] process_name=%(program_name)s_%(process_num)02d user=root command=php /home/website/kr8851queue_web/artisan queue:work --queue=csvsite --tries=5 --memory=512 --sleep=5 autostart=true autorestart=true stderr_logfile=/home/logs/supervisord/kr8851queue/csvsite/error.log stdout_logfile=/home/logs/supervisord/kr8851queue/csvsite/nohup.log [program:kr8851queue-olddata] process_name=%(program_name)s_%(process_num)02d user=root command=php /home/website/kr8851queue_web/artisan queue:work --queue=olddata --tries=5 --memory=512 --sleep=5 autostart=true autorestart=true stderr_logfile=/home/logs/supervisord/kr8851queue/olddata/error.log stdout_logfile=/home/logs/supervisord/kr8851queue/olddata/nohup.log [program:kr8851queue-official] process_name=%(program_name)s_%(process_num)02d user=root command=php /home/website/kr8851queue_web/artisan queue:work --queue=official --tries=5 --memory=512 --sleep=5 autostart=true autorestart=true stderr_logfile=/home/logs/supervisord/kr8851queue/official/error.log stdout_logfile=/home/logs/supervisord/kr8851queue/official/nohup.log
管理进程。
管理进程,需要我们启动 supervisor 服务,这里我们配置 systemctl,开机自动启动 supervisor。
创建 /usr/lib/systemd/system/supervisord.service 文件,配置如下:
[Unit] Description=Supervisor daemon [Service] Type=forking ExecStart=/usr/bin/supervisord ExecStop=/usr/bin/supervisorctl $OPTIONS shutdown ExecReload=/usr/bin/supervisorctl $OPTIONS reload KillMode=process Restart=on-failure RestartSec=42s [Install] WantedBy=multi-user.target
启用配置
systemctl enable supervisord.service
启动 supervisord
systemctl start supervisord.service
成功后,就可以通过 supervisorctl 交互命令管理进程脚本了。
读取有更新的配置文件
supervisorctl reread
更新配置文件修改过的程序
supervisorctl update
如果修改过 /etc/supervisord.conf 请使用如下命令
supervisorctl reload
启动,停止,重启,程序。
supervisorctl start 程序名
supervisorctl stop 程序名
supervisorctl restart 程序名
五、supervisor图形化管理界面
需要开启 /etc/supervisord.conf 文件中的 [inet_http_server]
[inet_http_server] port=0.0.0.0:9001 username=admin password=123456
设置完后,要开放 9001 端口
firewall-cmd --zone=public --add-port=9001/tcp --permanent
firewall-cmd --reload
重启 supervisor
supervisorctl reload
supervisor开启后如果日志文件过大,则可以采用定时任务的形式删除日志文件。
为避免日志文件过大,添加定时任务定时删除服务器上的日志文件。
$ mkdir /home/shell
$ vim delete.sh
#! /bin/bash
rm -rf /home/wwwroot/runtime/log/2020*/*
$ chmod -R 0755 /home/shell
新增定时任务
$ crontab -e
0 3 * * * /home/shell/delete.sh
每日凌晨3点执行脚本删除日志文件
supervisor 在一个文件中引入多个脚本命令
[program:kr8851queue-csvsite] process_name=%(program_name)s_%(process_num)02d user=root command=php /home/website/kr8851queue_web/artisan queue:work --queue=csvsite --tries=5 --memory=512 --sleep=5 autostart=true autorestart=true stderr_logfile=/home/logs/supervisord/kr8851queue/csvsite/error.log stdout_logfile=/home/logs/supervisord/kr8851queue/csvsite/nohup.log [program:kr8851queue-olddata] process_name=%(program_name)s_%(process_num)02d user=root command=php /home/website/kr8851queue_web/artisan queue:work --queue=olddata --tries=5 --memory=512 --sleep=5 autostart=true autorestart=true stderr_logfile=/home/logs/supervisord/kr8851queue/olddata/error.log stdout_logfile=/home/logs/supervisord/kr8851queue/olddata/nohup.log [program:kr8851queue-official] process_name=%(program_name)s_%(process_num)02d user=root command=php /home/website/kr8851queue_web/artisan queue:work --queue=official --tries=5 --memory=512 --sleep=5 autostart=true autorestart=true stderr_logfile=/home/logs/supervisord/kr8851queue/official/error.log stdout_logfile=/home/logs/supervisord/kr8851queue/official/nohup.log