一 安装 supervisor
1.1 使用easy_install 安装
执行以下命令
1.yum install python-setuptools
Error: Unable to find a match: python-setuptools
可参考:
你要用python2还是python3?python2-setuptools或者python3-setuptools
2.easy_install supervisor
1.2 使用pip 安装
pip3 install supervisor
1.3 centos安装
yum update
yum install -y epel-release
yum install -y supervisor
1.4 Debian/Ubuntu 安装
apt-get install supervisor
二 配置supervisor
1.创建文件夹和配置文件
mkdir /etc/supervisor
echo_supervisord_conf > /etc/supervisor/supervisord.conf
2.修改/etc/supervisor/supervisord.conf文件内容
- 修改配置include
在文件结尾[include]节点处
把;files = relative/directory/*.ini
改为files = conf.d/*.conf
-
修改日志目录
最新supervisor已经做了优化,没有放在tmp目录下
supervisor在正常安装完时运行正常,但隔一段时间后出现了故障,重启后报:
unix:///tmp/supervisor.sock no such file
原因是 supervisor 默认配置会把 socket 文件和 pid 守护进程生成在Linux的/tmp/目录下,/tmp/目录是缓存临时文件的目录,Linux会根据不同情况自动删除其下面的文件。比如缓存超时等,因此我们需要做如下修改:vi /etc/supervisord.conf
[unix_http_server] ;file=/tmp/supervisor.sock ; (the path to the socket file) file=/var/run/supervisor.sock ; 修改为 /var/run 目录,避免被系统删除
[supervisord] ;logfile=/tmp/supervisord.log ; (main log file;default $CWD/supervisord.log) logfile=/var/log/supervisor/supervisord.log ; 修改为 /var/log 目录,避免被系统删除 pidfile=/var/run/supervisord.pid ; 修改为 /var/run 目录,避免被系统删除
[supervisorctl] ; 必须和'unix_http_server'里面的设定匹配 ;serverurl=unix:///tmp/supervisor.sock ; use a unix:// URL for a unix socket serverurl=unix:///var/run/supervisor.sock ; 修改为 /var/run 目录,避免被系统删除
更新配置文件 或重启supervisor
3.修改配置后重启服务
supervisord -c /etc/supervisor/supervisord.conf
4.在/etc/supervisor/conf.d创建配置文件
5.配置开机启动
a.在/usr/lib/systemd/system/目录下创建文件supervisord.service
vim /usr/lib/systemd/system/supervisord.service
[Unit]
Description=Supervisor daemon
[Service]
Type=forking
ExecStart=/usr/bin/supervisord -c /etc/supervisor/supervisord.conf
ExecStop=/usr/bin/supervisorctl shutdown
ExecReload=/usr/bin/supervisorctl reload
KillMode=process
Restart=on-failure
RestartSec=42s
[Install]
WantedBy=multi-user.target
b.手动测试下面流程
执行以下命令: systemctl enable supervisord d.验证是否为开机启动: #提示 enabled 表示成功 systemctl is-enabled supervisord
三 常用命令
service supervisord start #启动 service supervisord stop #停止 service supervisord status #状态 supervisorctl shutdown #关闭所有任务 supervisorctl stop|start program_name #启动或停止服务 supervisorctl status #查看所有任务状态 sudo supervisorctl reread 重启 sudo supervisorctl update 更新 sudo supervisorctl start laravel-worker:* 开启指定队列
四 问题解决
1.“unix:///tmp/supervisor.sock no such file“ 错误解决方案
supervisor在正常安装完时运行正常,但隔一段时间后出现了故障,重启后报:
unix:///tmp/supervisor.sock no such file
原因是 supervisor 默认配置会把 socket 文件和 pid 守护进程生成在Linux的/tmp/目录下,/tmp/目录是缓存临时文件的目录,Linux会根据不同情况自动删除其下面的文件。比如缓存超时等,因此我们需要做如下修改:
具体操作如下:
vi /etc/supervisord.conf
[unix_http_server]
;file=/tmp/supervisor.sock ; (the path to the socket file)
file=/var/run/supervisor.sock ; 修改为 /var/run 目录,避免被系统删除
[supervisord]
;logfile=/tmp/supervisord.log ; (main log file;default $CWD/supervisord.log)
logfile=/var/log/supervisor/supervisord.log ; 修改为 /var/log 目录,避免被系统删除
pidfile=/var/run/supervisord.pid ; 修改为 /var/run 目录,避免被系统删除
[supervisorctl]
; 必须和'unix_http_server'里面的设定匹配
;serverurl=unix:///tmp/supervisor.sock ; use a unix:// URL for a unix socket
serverurl=unix:///var/run/supervisor.sock ; 修改为 /var/run 目录,避免被系统删除
更新配置文件 或重启supervisor
supervisorctl update
至此就可以了,socket 文件 supervisor.sock 和守护进程 supervisord.pid 两个文件放在/var/run/下面,log 文件 supervisord.log 放在/var/log/下面。