作为程序员一定要保持良好的睡眠,才能好编程

linux下安装supervisor 保证脚本持续执行

发布时间:2020-03-28


安装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



image.png





修改文件执行权限


$ 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


效果演示

image.png


$ supervisorctl reload 重新加载配置

$ supervisorctl status 查看脚本运行的状态

image.png




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