在linux或者unix操做系统中,守护进程(Daemon)是一种运行在后台的特殊进程,它独立于控制终端而且周期性的执行某种任务或等待处理某些发生的事件。因为在linux中,每一个系统与用户进行交流的界面称为终端,每个今后终端开始运行的进程都会依附于这个终端,这个终端被称为这些进程的控制终端,当控制终端被关闭的时候,相应的进程都会自动关闭。可是守护进程却能突破这种限制,它脱离于终端而且在后台运行,而且它脱离终端的目的是为了不进程在运行的过程当中的信息在任何终端中显示而且进程也不会被任何终端所产生的终端信息所打断。它从被执行的时候开始运转,直到整个系统关闭才退出。python
此处的建立守护进程,是指发布在Linux上 asp.net core 程序的dotnet xxx.dll命令的宿主进程建立一个守护进程。linux
在 Linux 上有不少能够管理进程的工具,咱们使用 Supervisor 来作这个事情。缘由有两点:shell
一、它是微软官方文档推荐的,下降学习成本。vim
二、它并不必定是最好的,但必定是文档最全的。浏览器
Supervisor是采用 Python(2.4+) 开发的,它是一个容许用户管理 基于 Unix 系统进程的 Client/Server 系统,提供了大量功能来实现对进程的管理。服务器
官方文档:http://supervisord.org/asp.net
目前存在三个问题python2.7
问题1:ASP.NET Core应用程序运行在shell之中,若是关闭shell则会发现ASP.NET Core应用被关闭,从而致使应用没法访问,这种状况固然是咱们不想遇到的,并且生产环境对这种状况是零容忍的。 工具
问题2:若是ASP.NET Core进程意外终止那么须要人为连进shell进行再次启动,每每这种操做都不够及时。 学习
问题3:若是服务器宕机或须要重启咱们则仍是须要连入shell进行启动。
为了解决这个问题,咱们须要有一个程序来监听ASP.NET Core 应用程序的情况。在应用程序中止运行的时候当即从新启动。
操做以下:
一、 安装Supervisor
执行如下命令:
或者
若是报错可能:
以下提示,安装完成:
1
2
|
Using /usr/lib64/python2.7/site-packages
Finished processing dependencies
for
supervisor==3.3.1
|
二、 配置Supervisor
a.建立文件夹和配置文件
mkdir /etc/supervisor
echo_supervisord_conf > /etc/supervisor/supervisord.conf
b.修改/etc/supervisor/supervisord.conf文件内容
在文件结尾[include]节点处
把;files = relative/directory/*.ini改成files = conf.d/*.comf
保存并退出
c.执行supervisorctl reload命令使配置文件生效。
d.在/etc/supervisor/下建立conf.d文件夹,及ProjectName.conf(以项目名称命名的)
e.打开ProjectName.conf文件,添加内容以下:
[program: ProjectName]
command=dotnet ProjectName.dll ; 运行程序的命令
directory=/root/Publishing/PublishOutput/ ; 命令执行的目录
autorestart=true ; 程序意外退出是否自动重启
autostart=true ; 是否自动启动
stderr_logfile=/var/log/ProjectName.err.log ; 错误日志文件
stdout_logfile=/var/log/ProjectName.out.log ; 输出日志文件
environment=ASPNETCORE_ENVIRONMENT=Production ; 进程环境变量
user=root ; 进程执行的用户身份
stopsignal=INT
startsecs=1 ; 自动重启间隔
保存并退出
三、 运行supervisord,查看是否生效,执行如下命令:
supervisord -c /etc/supervisor/ supervisord.conf
ps -ef | grep ProjectName
返回
root 27007 27006 1 13:21 ? 00:00:02 dotnet ProjectName.dll
root 27026 26810 0 13:23 pts/0 00:00:00 grep --color=auto ProjectName
表示运行成功!
浏览器访问站点…
注意:在执行第一条命令出现如下提示信息时:
Error: Another program is already listening on a port that one of our HTTP servers is configured to use. Shut this program down first before starting supervisord.
For help, use /usr/bin/supervisord –h
是由于有一个使用supervisor配置的应用程序正在运行,须要执行supervisorctl shutdown命令终止它,或从新建立一个ProjectName.conf文件再执行第一条命令。
四、 经常使用命令
1
2
3
4
5
6
7
8
9
|
sudo service supervisor stop 中止supervisor服务
sudo service supervisor start 启动supervisor服务
supervisorctl shutdown #关闭全部任务
supervisorctl stop|start program_name #启动或中止服务
supervisorctl status #查看全部任务状态
|
五、 配置supervisord开机启动
a.在指定目录下建立文件supervisord.service
vim /usr/lib/systemd/system/supervisord.service
b.输入如下内容:
[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
提示:
Created symlink from /etc/systemd/system/multi-user.target.wants/supervisord.service to /usr/lib/systemd/system/supervisord.service.
验证是否为开机启动:
systemctl is-enabled supervisord
提示:
enabled
表示设置成功!
至此,建立supervisor守护进程完毕。