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 ;错误日志输出位置,目录要存在