Linux中配置Asp.net Core2.0守护服务(Supervisor),JoeyChou

Linux中配置Asp.net Core2.0守护服务(Supervisor)

这篇博客中介绍一个新的名词“Supervisor”,翻译过来应该是超级用户的意思,在电脑里面这个超级用户可是非常NB的,它什么都管,那么就说一下我们要用到的这个“超级用户”,Supervisor是用Python开发的一套通用的进程管理程序,能将一个普通的命令行进程变为后台的守护进程,并实时监控进程的状态,一旦发现进程死掉了,立马就去重启它。这不正是我们想要的吗。

首先安装Supervisor,命令为:

yum install python-setuptools

easy_install supervisor


可以看到第一条命令执行时,提示已经安装了python工具并且是最新版本,下一条命令应该也是成功执行了,下面继续配置Supervisor,命令为:

mkdir /etc/supervisor

echo_supervisord_conf > /etc/supervisor/supervisord.conf

修改配置文件supervisord.conf,真的是很讨厌在命令行中去修改内容,我还是直接找到源文件,使用WinSCP有好处是可以直接找到源文件然后修改,不过建议大家先下载到本地备份,万一改乱套了比较麻烦,尽量不要在服务器直接改,修改如下:将最后一行修改为:注意一定要去掉前面的分号,保存完成。注意这个*.conf也可以改成*.ini。下面配置对ASP.Net Core应用的守护

创建一个DotNetCoreWebDemo01.conf文件,配置如下:

[program:DotNetCoreWebDemo01]
command=dotnet DotNetCoreWebDemo01.dll ; 运行程序的命令
directory=/root/DotNetCoreWebDemo01/ ; 命令执行的目录
autorestart=true ; 程序意外退出是否自动重启
stderr_logfile=/var/log/DotNetCoreWebDemo01.err.log ; 错误日志文;件
stdout_logfile=/var/log/DotNetCoreWebDemo01.out.log ; 输出日志文件
environment=ASPNETCORE_ENVIRONMENT=Production ; 进程环境变量
user=root ; 进程执行的用户身份
stopsignal=INT

每一句后面都加了注释,根据自己的实际情况配置即可,本地创建完成后,我们将他拷贝到/etc/supervisor/conf.d文件夹下,就是我们刚刚在上面配置的files 的值的文件夹下,如果不存在conf.d文件夹,自己手动创建即可,还有如果你配置的是*.ini,那么就将配置文件扩展名改为.ini,对应即可,下面运行命令

 supervisord -c /etc/supervisor/supervisord.conf


 ps -ef | grep DotNetCoreWebDemo01


存在dotnet DotNetCoreWebDemo01.dll进程就代表已经启动了,如果出现下面的情况:


则需要将刚才的配置进行reload,重新生效,命令为 supervisorctl reload,然后再运行  ps -ef | grep DotNetCoreWebDemo01,我们现在再运行下Web,没问题成功了,下面我们把这个守护神设为开机启动,以后就不需要担心Web关掉了。真的是要被这些命令折磨吐了!!!坚持!!!!

创建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

然后保存,放到文件目录

/usr/lib/systemd/system下

执行命令 :

systemctl enable supervisord 

设为开机启动,执行命令 :

systemctl is-enabled supervisord  查看是否已经为开机启动

以上全部配置完成了,自己可以重启下服务器然后验证下。

进阶篇

网站报错后,可以先杀死任务进程,然后守护进程会重启任务

$ kill -s 9 1827
其中-s 9 制定了传递给进程的信号是9,即强制、尽快终止进程。各个终止信号及其作用见附录。
1827则是上面ps查到的项目的PID。
简单吧,但有个问题,进程少了则无所谓,进程多了,就会觉得痛苦了,无论是ps -ef 还是ps -aux,每次都要在一大串进程信息里面查找到要杀的进程

守护进程重启:service supervisord restart

更改文件夹权限:

chown www.www /data/wwwroot/ -R

chown 755 /data/wwwroot/ -R

守护进程状态:supervisorctl status

重启全部守护进程:supervisorctl restart HyhrmisAPI:*