首先简单了解下Supervisor, Supervisor(http://supervisord.org/)是用Python开发的一个client/server服务,是Linux/Unix系统下的一个进程管理工具,不支持Windows系统。它可以很方便的监听、启动、停止、重启一个或多个进程。用Supervisor管理的进程,当一个进程意外被杀死,supervisort监听到进程死后,会自动将它重新拉起,很方便的做到进程自动恢复的功能,不再需要自己写shell脚本来控制。
执行下面的命令,安装python。
yum install python-setuptools
easy_install supervisor
在/etc/目录下,创建supervisor文件夹。
mkdir /etc/supervisor
在该目录下,生成supervisord.conf文件
echo_supervisord_conf > /etc/supervisor/supervisord.conf
修改/etc/supervisor/supervisord.conf文件内容,在文件中找到[include],把;去掉,把files = ./conf.d/*.conf
[include]
files=./conf.d/*.conf
然后,在conf.d目录中,创建一个名为helloworld.conf的文件,配置如下:
[program: ProjectName]
command=dotnet helloworld.dll ; 运行程序的命令
directory=/wwwroot/demo/ ; 命令执行的目录
autorestart=true ; 程序意外退出是否自动重启
autostart=true ; 是否自动启动
stderr_logfile=/var/log/ProjectName.err.log ; 错误日志文件
stdout_logfile=/var/log/ProjectName.out.log ; 输出日志文件
environment=ASPNETCORE_ENVIRONMENT=Production ; 进程环境变量
user=root ; 进程执行的用户身份
stopsignal=INT startsecs=1 ; 自动重启间隔
上面是以.net core程序为例,创建一个守护进程的配置。
接下来,指定supervisor配置文件:
supervisord -c /etc/supervisor/supervisord.conf
配置supervisor开机启动
sudo systemctl start supervisord.service
sudo systemctl enable supervisord.service
如果出现unit未找到,则可以手动创建一个service文件,进入/lib/systemd/system目录,并创建supervisor.service文件
[Unit]
Description=supervisor
After=network.target
[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.service
systemctl daemon-reload
supervisorctl 操作
supervisorctl 是 supervisord 的命令行客户端工具,使用的配置和 supervisord 一样,这里就不再说了。下面,主要介绍 supervisorctl 操作的常用命令:
输入命令 supervisorctl 进入 supervisorctl 的 shell 交互界面(还是纯命令行),就可以在下面输入命令了。:
help # 查看帮助
status # 查看程序状态
stop program_name # 关闭 指定的程序
start program_name # 启动 指定的程序
restart program_name # 重启 指定的程序
tail -f program_name # 查看 该程序的日志
update # 重启配置文件修改过的程序(修改了配置,通过这个命令加载新的配置)
也可以直接通过 shell 命令操作;