为了服务持续文档,添加了一个守护进程,使用工具软件Supervisor实现,该工具依赖python环境。
Supervisor是用Python开发的一套通用的进程管理程序,能将一个普通的命令行进程变为后台daemon,并监控进程状态,异常退出时能自动重启。它是通过fork/exec的方式把这些被管理的进程当作supervisor的子进程来启动,这样只要在supervisor的配置文件中,把要管理的进程的可执行文件的路径写进去即可。也实现当子进程挂掉的时候,父进程可以准确获取子进程挂掉的信息的,可以选择是否自己启动和报警。
安装supervisor
执行命令:
apt install supervisor
等待supervisor安装完成
可以使用echo_supervisord_conf生成一些默认的配置文件,方便修改:
echo_supervisord_conf > /etc/supervisor/supervisord.conf
打开/etc/supervisor目录下的supervisord.conf文件,如下:前面的“;”是注释符
去掉下面配置项前面的“;”,启动supervisor服务后,就能通过http://ip:9001访问并管理配置的进程,方便运维
;[inet_http_server] ; inet (TCP) server disabled by default
;port=127.0.0.1:9001 ; (ip_address:port specifier, *:port for all iface)
;username=user ; (default is no username (open server))
;password=123 ; (default is no password (open server))
先看看通过启动后通过地址http://ip:9001的界面效果:
访问的时候需要用户名,密码,这个对应的就是配置文件中的username与password
配置管理进程。
如果我们需要管理的进程比较多的话,建议每个进程单独一个配置文件,然后在supervisord.conf文件中的[include]项增加对配置文件的引入。
因为我将所有进程的配置项都放在/etc/supervisor/config.d文件夹下,所以在[include]节点下增加下面这项即可
[include]
files = /etc/supervisor/config.d/*.conf
比如我现在需要对mediaserver进程进行管理,我在/etc/supervisor/config.d文件夹下增加一个命名为mediaserver.conf文件
[program:hubconsumer]
user=myuser
directory=/home/myuser/DTrms.V2.HubConsumer
command= nohup dotnet ./DTrms.V2.HubConsumer.dll 2 &
autostart=true
autorestart=true
startretries=10
stdout_logfile=/home/myuser/DTrms.V2.HubConsumer/logs/hubconsumer.log
priority=1
里面定义内容如下:
启动Supervisor服务
执行命令:
supervisord -c /etc/supervisor/supervisord.conf
也可用
supervisorctl reload
重新加载配置文件
注意:此处安装和启动都是用的root权限,而配置中的用户是myuser用户权限。
常用指令
supervisorctl status查看状态
supervisorctl stop all 停止所有
supervisorctl start all 开始所有
supervisorctl update 如果有改配置文件,需要执行这个
supervisorctl reload 重新启动