CentOS7配置Supervisor



Supervisor 的文档地址:http://www.supervisord.org/

1. 安装 Supervisor

#启用epel库
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
#安装
yum install -y supervisor

#启动
sudo systemctl start supervisord
#开机自启
sudo systemctl enable supervisord

2. 配置 Supervisor

Supervisor 的配置文件为:​​/etc/supervisord.conf​

Supervisor 所管理的应用的配置文件放在​​/etc/supervisord.d/​​目录中,这个目录可以在 supervisord.conf 中配置。

CentOS7配置Supervisor_配置文件

3.启动 Supervisor #非必须执行

#指定配置文件启动
supervisord -c /etc/supervisor.conf

通过这种方式启动,服务器重启后 Supervisor 不会自动启动,不建议使用这种方式启动Supervisor。

安装 Supervisor 后,在​​/usr/lib/systemd/system/​​目录中会有一个​​supervisord.service​​文件,内容如下:

CentOS7配置Supervisor_重启_02

如果没有,在该目录中创建一个,用下面的内容替换:

#创建`supervisord.service`文件
cd /usr/lib/systemd/system/
touch 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
#启动Supervisor
systemctl start supervisord.service
#查看Supervisor状态
systemctl status supervisord.service

如果在启动的时候遇到如下错误:

​Another program is already listening on a port that one of our HTTP servers is configured to use. Shut this program​

使用以下命令:

find / -name supervisor.sock
# 找到supervisor.sock,然后unlink即可
unlink /path/supervisor.sock

4. 应用配置

Supervisor 管理应用的进程,需要对每个应用进行配置。在​​/etc/supervisor.d​​中创建helloworld.ini,每个应用对应一个配置文件即可。

下面是配置文件的示例:

配置文件中的程序尽量在​​/usr/bin/​​中或加path

#程序的名称
[program:helloworld]
#执行的命令
command = dotnet HelloWorld.dll
#命令执行的目录
directory = /root/www/
#环境变量
environment = ASPNETCORE__ENVIRONMENT=Production
#执行进程的用户
user = root
stopsignal = INT
#是否自动启动
autostart = true
#是否自动重启
autorestart = true
#自动重启间隔
startsecs = 1
#错误输出路径
stderr_logfile = /var/log/helloworld.err.log
#日志输出路径
stdout_logfile = /var/log/helloworld.out.log

创建好配置文件后,重启 Supervisor

#重启Supervisor
sudo systemctl restart supervisord
# 或热重启,不会重启其他子进程
supervisorctl reread
# 使用update命令,也会启动脚本
supervisorctl update

supervisorctl执行错误

出现 error: <class ‘socket.error’>, [Errno 2] No such file or directory: file: /usr/lib64/python2.7/socket.py line: 224 错误

# 解决方法使用下面命令启动
/usr/bin/python2 /usr/bin/supervisord -c /etc/supervisord.conf

————————————————

转自链接:https://learnku.com/articles/48865

同时要保证*.ini 配置文件中的空格,程序路径,目录是否正确/存在

为确保没有错误,可以正常启动,使用前文提到的查看Supervisor状态的命令查看。或者查看要管理的进程是否启动,本例中可以使用下面的命令:

ps -ef | grep HelloWorld.dll
# 或
ps -ef | grep dotnet

5. Supervisor 管理进程

有两种方式可以管理进程,命令行和Web管理。

#关闭所有任务
supervisorctl shutdown
#暂停任务/开始任务
supervisorctl stop|start program_name
#查看所有任务状态
supervisorctl status

Web管理

启用 Web 管理,首先将/etc/supervisord.conf配置文件中的inet_http_server节点取消注释。

#修改后重启 Supervisor
supervisorctl reload

下面是第三方Supervisor的Web管理工具:

cesi :https://github.com/Gamegos/cesi

suponoff:https://github.com/GambitResearch/suponoff

gosuv:https://github.com/codeskyblue/gosuv

supervisord-monitor:https://github.com/mlazarov/supervisord-monitor

supervisord-monitor改进版:https://github.com/WisZhou/supervisord-monitor