前言
之前终于在Linux上部署好了.NetCore站点,但是这个站点非常“脆弱”。当我的ssh连接关闭或者我想在当前连接执行其他命令时候就必须关闭dotnet站点的执行程序。这显然不是我想要达到的效果,还好知道有所谓的守护进程这个东西,大多数人都是推荐采取Supervisor来进行Linux上的应用进程管理,这里就开始使用它来对我们的.NetCore应用进程进行托管吧。
Linux的守护进程
我对于Linux的守护进程的理解是在Linux操作系统上通过守护进程的配置对需要进行守护的应用进行有效管理,如开机自启动、进程崩溃后自动重启等等。总之把它当成一个应用管家,在这个管家里我们要做好配置,以及可以手动对进程进行启动、停止等等操作。
这里假设已经将.NetCore应用部署到了Linux,存放的目录为 /root/netcore 应用名称为LinuxWebAppSample1
在站点存放的目录输入pwd可以获取到当前目录:
至于安装sdk、运行时什么的就不说了,部署站点那篇博客已经将详细的顺序和命令都写出来。现在就是万事俱备,只差我们的守护进程管理软件 Supervisor
安装Supervisor
输入下面命令安装Supervisor
yum install supervisor
输入下面命令查看是否安装成功
supervisord --version
- 这里需要注意的是安装完Supervisor后我们的命令是Supervisord 因为Linux上安装成功后Supervisor的服务名称就是
supervisord.service 详情可通过以下命令查看
cat /usr/lib/systemd/system/supervisord.service
设置supervisor开机启动
sudo systemctl enable supervisord
sudo systemctl start supervisord
进入 supervisor 控制台执行命令
sudo supervisorctl
能够进入 supervisor 控制台,表示服务安装成功,并已成功启动。如需退出supervisor控制台可输入下面命令
quit
配置supervisor相关文件
通过上面一些列操作我们Linux上已经安装好了supervisor这个守护进程服务,但如果需要让它对我们发布的应用程序做守护进程则需要进行下面一些列操作了。这里以我们之前部署在/root/netcore 下的LinuxWebAppSample1应用为例。
supervisord.conf
supervisord.conf是supervisor服务的配置文件,通过命令 cat /etc/supervisord.conf 可以查看相关信息
其中有个下面的节点表示supervisor 引入需守护的进程配置文件目录。
[include] files = supervisord.d/*.ini
我是这么理解的,supervisor服务会读取 /etc/supervisord.conf 这个配置文件的include节点,通过该节点获取到需要管理的应用进程
supervisord.d的完整目录是在/etc/supervisord.d/
- 这么说吧,后续如果需要通过supervisor服务来管理指定应用则必须在/etc/supervisord.d/目录下创建相应的ini配置文件~
supervisor的配置文件详细信息可通过官网查阅 http://supervisord.org
创建站点的守护进程配置文件 LinuxWebAppSample1.ini
vim /etc/supervisord.d/LinuxWebAppSample1.ini
输入i键,切换为vim的写入模式,将下面内容复制进去,然后按esc切换为命令模式 键入":wq"保存退出
#冒号后面为应用名称
[program:LinuxWebAppSample1]
#应用启动命令,需要dotnet的完整路径
command=/usr/bin/dotnet /root/netcore/LinuxWebAppSample1.dll
#启动的目录,否则应用会报找不到appsetting.json错误
directory=/root/netcore
#服务启动时自动启动,崩溃自动重启
autostart=true
autorestart=true
# .net core mvc应用启动参数,表明是生产环境
environment=ASPNETCORE_ENVIRONMENT=Production
user=root
# 日志输出路径
stdout_logfile=/var/log/supervisor/LinuxWebAppSample1.log
stderr_logfile=/var/log/supervisor/LinuxWebAppSample1.err.log
上面的日志路径可以修改为自定义的路径,记得路径必须真实存在。
重启 supervisor 服务,并进入 supervisorctl
sudo systemctl restart supervisord
sudo supervisorctl
再次进入到supervisor控制台则表示服务正常。
输入 quit命令后退出来,在Linux控制台输入下面命令查看站点是否已启动
ps -ef | grep dotnet
OK~现在守护进程已经启用了,哪怕关闭当前SSH链接我们的网站也不会受到影响啦~
现在看下我们的网站
supervisor管理界面
supervisor不得不说非常贴心,它还提供了一个网站可以让我们在客户端浏览器上对我们的守护进程进行管理。
首先输入下面命令,重启下supervisor
systemctl enable supervisord.service
systemctl start supervisord.service
systemctl status supervisord.service
修改下supervisord.conf配置文件,这一步非常重要。
vim /etc/supervisord.conf
通过vim的查找命令
:/[inet_http_]
找到下图的节点
输入i键切换成写入模式,将inet_http_server节点的注释去掉,port更改为 port=*:9001
修改成功后输入下面命令重新加载配置文件
supervisorctl reload
然后就可以在客户端通过ip地址加端口号访问supervisor的管理界面了。效果如下图