1. 首页>
  2. 技术文章>
  3. centos安装Supervisor守护 dotnetcore程序

centos安装Supervisor守护 dotnetcore程序

10/29/17 9:12:38 PM 浏览 1676 评论 0

supervisor centos

centos安装Supervisor守护 dotnetcore程序,如果不安装Supervisor,每次重启服务器都要重新开启dotnetcore程序,在centos环境安装步骤如下:

1、安装Supervisor

yum install python-setuptools
yum install -y supervisor

2、配置Supervisor

#建立supervisor文件夹
mkdir /etc/supervisor

#使用默认模板生成.conf配置文件
echo_supervisord_conf > /etc/supervisor/supervisord.conf

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

打开/etc/supervisor/supervisord.conf,可以直接用WinScp修改或者用vim命令,最底部加入代码,这是为了让以后一个站点一个配置文件放在/etc/supervisor/supervisor/conf.d目录:

[include]
files=conf.d/*.conf

现在检查下有没有/etc/supervisor/conf.d这个目录,没有的话,建立以下conf.d目录。

3、增加一个站点的配置文件,路径为:/etc/supervisor/conf.d/MyCode.WebAdmin.conf.d,MyCode.WebAdmin.conf代码如下:

[program:MyCode.WebAdmin]
#要执行的命令
command=dotnet MyCode.WebAdmin.dll
#命令执行的目录
directory=/www/wwwroot/www.52jiagou.com/ 
#环境变量
environment=ASPNETCORE__ENVIRONMENT=Production 
#进程执行的用户身份
user=root 
stopsignal=INT
#是否自动启动
autostart=true 
#是否自动重启
autorestart=true 
#自动重启间隔
startsecs=1 
#标准错误日志,这里最好先在相应目录创建好文件
stderr_logfile=/www/wwwlogs/supervisor/www.52jiagou.com.err.log 
#标准输出日志,这里最好先在相应目录创建好文件
stdout_logfile=/www/wwwlogs/supervisor/www.52jiagou.com.out.log

再来一个例子:

[program:MyDotNetCore-test-api] ; 管理的子程序名字,要和项目有关联,不能乱写
command = /bin/bash -c "cd /my/publish/test-api/&&./MyDotNetCore.Project.WebApi --urls http://*:5001";
priority=1 ; 数字越高,优先级越高(对不同进程而言)
numprocs=1 ; 启动几个进程
autostart=true ; 随着supervisord的启动而启动
autorestart=true ; 自动重启
startretries=10 ; 启动失败时的最多重试次数
exitcodes=0 ; 正常退出代码
stopsignal=KILL ; 用来杀死进程的信号
stopwaitsecs=10 ; 发送SIGKILL前的等待时间
redirect_stderr=true ; 重定向stderr到stdout
stopasgroup=true ; 重要的设置,一起管理子进程
stdout_logfile_maxbytes=20MB ; 日志文件大小限制
stdout_logfile_backups=10 ; 日志文件备份数量
stdout_logfile =/my/software/supervisor/logs/test-api-supervisor.log ;错误日志输出位置,目录要存在

4、配置supervisor为开机启动,新建supervisord.service,路径:/usr/lib/systemd/system/supervisord.service,代码如下:

# dservice 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 shutdown
ExecReload=/usr/bin/supervisorctl reload
KillMode=process
Restart=on-failure
RestartSec=42s

[Install]
WantedBy=multi-user.target

执行命令:

//systemctl enable supervisord
//启动,按设定的配置文件启动
supervisord -c /my/software/supervisor/supervisord.conf 
supervisorctl -c /my/software/supervisor/supervisord.conf reload
supervisorctl -c /my/software/supervisor/supervisord.conf  start MyDotNetCore-test-api

其中过程可能会报这个错误,“Unlinking stale socket /tmp/supervisor、unix:/run/supervisor/supervisor.sock no such file”在supervisord.conf修改supervisor.sock的路径,并使用:unlink /my/software/supervisor/supervisor.sock命令后正常

5、查看是否被守护进程拉起

ps -ef|grep dotnet

如果有看到正确的返回数据,重启下服务器,检查下是否一切正常。

6、将supervisord.conf中[inet_http_server]部分做相应配置,在supervisorctl中reload即可启动web管理界面。

7、当然还需要配置nginx进supervisord.conf,

[program:nginx] ; 管理的子程序名字,要和项目有关联,不能乱写
command = /my/software/nginx/sbin/nginx -g 'daemon off;'
priority=1 ; 数字越高,优先级越高(对不同进程而言)
numprocs=1 ; 启动几个进程
autostart=true ; 随着supervisord的启动而启动
autorestart=true ; 自动重启
startretries=10 ; 启动失败时的最多重试次数
exitcodes=0 ; 正常退出代码
stopsignal=KILL ; 用来杀死进程的信号
stopwaitsecs=10 ; 发送SIGKILL前的等待时间
redirect_stderr=true ; 重定向stderr到stdout
stopasgroup=true ; 重要的设置,一起管理子进程
stdout_logfile_maxbytes=20MB ; 日志文件大小限制
stdout_logfile_backups=10 ; 日志文件备份数量
stdout_logfile =/my/software/supervisor/logs/nginx-supervisor.log ;错误日志输出位置,目录要存在


网友讨论