这篇博客中介绍一个新的名词“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
存在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:*