supervisor守护进程, 环境变量问题
转载自 https://www.cnblogs.com/qmhuang/p/8196132.html
配置supervisor实现进程守护
1.安装supervisor
yum install Supervisor
2.启动服务
supervisord -c /etc/supervisord.conf
进入 cd /etc 目录 找到supervisord.conf 配置文件 和 supervisord.d 文件夹,使用vim编辑supervisord.conf文件,拉到最底部我们可以看到
files = supervisord.d/*.ini 这句代码说明它会加载supervisord.d文件夹中的所有.ini配置文件
3.编辑配置文件
随后我们在supervosprd.d中创建一个delploy.ini文件并编辑如下
[program:DeployLinux] #DeployLinux 为程序的名称 command=dotnet DeployLinux.dll #需要执行的命令 directory=/home/publish #命令执行的目录 environment=ASPNETCORE__ENVIRONMENT=Production #环境变量 user=root #用户 stopsignal=INT autostart=true #是否自启动 autorestart=true #是否自动重启 startsecs=3 #自动重启时间间隔(s) stderr_logfile=/var/log/ossoffical.err.log #错误日志文件 stdout_logfile=/var/log/ossoffical.out.log #输出日志文件
# 下面是我自己的项目示例
[program:odin-agent] stopasgroup=false # 默认为false,如果为true,当supervisorctl关闭项目时,会项目main启动的mysql一起关闭 user=root directory=/u01/agent/odin-agent # 工作路径 command=nohup /usr/bin/python3 main.py >/dev/null 2>&1 & # 执行命令 redirect_stderr=true # 默认为false,为true的话,stderr的log会并入stdout的log中 autorestart=true # 自动重启 stdout_logfile=/u01/agent/logs/odin-agent-out.log # 输出错误日志,注:这个logs日志文件必须存在,不然supervisord启动会失败 stderr_logfile=/u01/agent/logs/odin-agent-out.err
4.重载配置文件
执行命令使用心得配置文件运行supervisor服务
supervisorctl reload //重新加载配置文件
注意: 这里可以通过下方命令查看supervisor的运行状态
supervisorctl status
如报错,说明3编辑的配置有问题(如错误或输出日志文件不存在),这时supervisord是关闭状态,需要重新启动服务
supervisord -c /etc/supervisord.conf
5.访问网站
在未执行dotnet xxx.dll启动程序的情况下 在外部访问网站路径成功
成功后supervisor 日志如下,在日志中我们看到在启动过程中,服务加载了我们的配置文件 deploy.ini
6.意外情况
这个问题本不该遇到的,但是由于我是在一无所知的情况下操作的,所以因为没有启动服务而一度焦头烂额,碎记下来警醒自己
说明你没有启动服务,执行
supervisord -c /etc/supervisord.conf 启动即可
7.常用命令
# 常用命令如下 supervisordctl status 查看进程运行状态 supervisordctl start 进程名 启动进程 supervisordctl stop 进程名 关闭进程 supervisordctl restart 进程名 重启进程 supervisordctl update 重新载入配置文件 supervisordctl shutdown 关闭supervisord supervisordctl clear 进程名 清空进程日志 supervisordctl 进入到交互模式下。使用help查看所有命令。 start stop restart + all 表示启动,关闭,重启所有进程
访问Supervisor的图形化界面
1.修改配置
将supervisord.conf 中的一段配置更改如下
2.重载supervisor配置
然后执行
supervisorctl reload 重新加载配置
3.开启端口
在访问其web管理界面之前,先需要开启你为他配置的端口,这里我们分配给他的是9001端口,下面是端口管理的一些命令
firewall-cmd --query-port=9001/tcp //监测端口是否开启 firewall-cmd --add-port=9001/tcp //开启80端口 firewall-cmd --remove-port=9001/tcp //关闭80端口 sudo firewall-cmd --reload //重新加载配置
4.访问图形界面
端口开启成功后访问supervisor的界面程序进行进程管理
实际项目中,发现supervisor启动的python项目无法获取系统环境变量的问题
1.通过进程配置配置增加环境变量参数
2.通过systemd管理,修改systemd的配置。(缺点:必须systemd启动管理,才有效)
# systemd 加载配置
systemctl daemon-reload
# 通过systemd启动supervisor systemctl start supervisor
编辑
vim /lib/systemd/system/supervisor.service
里面追加环境变量所在文件,这样supervisor启动的python可以获取到对应文件中的环境变量