supervisor 守护者进程配置小记
安装 Supervisor
联网状态下,官方推荐首选安装方法是使用easy_install
,它是setuptools(Python 包管理工具)的一个功能。所以先执行如下命令安装 setuptools:
yum install python-setuptools
请更换root
用户,执行如下命令安装 Supervisor:
easy_install supervisor
配置 Supervisor
运行supervisord
服务的时候,需要指定 Supervisor 配置文件,如果没有显示指定,默认会从以下目录中加载:
$CWD/supervisord.conf #$CWD表示运行 supervisord 程序的目录
$CWD/etc/supervisord.conf
/etc/supervisord.conf
/etc/supervisor/supervisord.conf (since Supervisor 3.3.0)
../etc/supervisord.conf (Relative to the executable)
../supervisord.conf (Relative to the executable)
所以,先通过如下命令创建目录,以便让 Supervisor 成功加载默认配置:
mkdir /etc/supervisor
加载目录有了,然后通过echo_supervisord_conf
程序(用来生成初始配置文件)来初始化一个配置文件:
echo_supervisord_conf > /etc/supervisor/supervisord.conf
打开supervisord.conf
文件,可以看到echo_supervisord_conf
已经帮我们初始化好了一个样例配置,我们需要简单修改一下。
尾部找到如下文本片段:
;[include]
;files = relative/directory/*.ini
改为:
[include]
files = conf.d/*.conf
即,把注释去除、设置/etc/supervisor/conf.d
为 Supervisor 进程配置文件加载目录。
这样,Supervisor 会自动加载该目录下.conf
后缀的文件作为共同服务配置。Supervisor 管理的每个进程单独写一个配置文件放在该目录下,supervisord.conf
配置文件中保留公共配置。
创建进程配置加载目录:
mkdir /etc/supervisor/conf.d
接下来就需要为我们已经部署的 ASP .NET Core 程序的宿主进程创建一个进程配置文件netcore.conf
,保存并上传到/etc/supervisor/conf.d
目录。
配置文件netcore.conf
内容如下:
[program:Scorpio.WebApi] ;自定义进程名称
command=dotnet Scorpio.WebApi.dll ;程序启动命令
directory=/home/wwwroot/scorpio ;命令执行的目录
autostart=true ;在Supervisord启动时,程序是否启动
autorestart=true ;程序退出后自动重启
startretries=5 ;启动失败自动重试次数,默认是3
startsecs=1 ;自动重启间隔
user=root ;设置启动进程的用户,默认是root
priority=999 ;进程启动优先级,默认999,值小的优先启动
stderr_logfile=/var/log/Scorpio.WebApi.err.log ;标准错误日志
stdout_logfile=/var/log/Scorpio.WebApi.out.log ;标准输出日志
environment=ASPNETCORE_ENVIRONMENT=Production ;进程环境变量
stopsignal=INT ;请求停止时用来杀死程序的信号
启动 Supervisor 服务,命令如下:
supervisord -c /etc/supervisor/supervisord.conf
这时,在会发现我们部署的网站程序不在 shell 中通过dotnet xxx.dll
启动,同样可以访问。
设置 Supervisor 开机启动
首先为 Supervisor 新建一个启动服务脚本supervisor.service
,然后保存并上传至服务器/usr/lib/systemd/system/
目录。
脚本内容如下:
# supervisord service for systemd (CentOS 7.0+)
# by ET-CS (https://github.com/ET-CS)
[Unit]
Description=Supervisor daemon
[Service]
Type=forking
ExecStart=/usr/bin/supervisord -c /etc/supervisor/supervisord.conf
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 supervisor
验证是否成功:
systemctl is-enabled supervisor
如果输出enabled
则表示设置成功,也可重启服务器验证。
Supervisorctl 管理进程
Supervisor 服务启动后,受其管理的进程会在后台运行。可以通过supervisorctl
客户端管理进程。
输入如下命令进入supervisorctl
交互终端,按Ctrl
+C
键退出:
supervisorctl
输入help
查询帮助:
supervisor> help
default commands (type help <topic>):
=====================================
add exit open reload restart start tail
avail fg pid remove shutdown status update
clear maintail quit reread signal stop version
输入help ****
查询详细命令,比如输入help stop
:
supervisor> help stop
stop <name> Stop a process
stop <gname>:* Stop all processes in a group
stop <name> <name> Stop multiple processes or groups
stop all Stop all processes
说明一下,netcore.conf配置里的中文都去掉,那个是原文里解释用的,如果编辑的时候直接copy过去的话是不会生效的(而且好像也没错误提示,谨记!)
原文:https://www.cnblogs.com/esofar/p/8043792.html