ASP.NET Core Linux下为 dotnet 建立守护进程(必备知识)
前言
在上篇文章中介绍了如何在 Docker 容器中部署咱们的 asp.net core 应用程序,本篇主要是怎么样为咱们在 Linux 或者 macOs 中部署的 dotnet 程序建立一个守护进程,来保证咱们的程序在异常或者是电脑重启的时候仍然可以正常访问。
若是你之后用准备使用 asp.net core来开发项目的话,程序而且部署到 Linux 上的话,那么此篇文章你值得收藏。
若是你以为对你有帮助的话,不妨点个【推荐】。
目录
- 什么是守护进程
- Supervisor 介绍
- Supervisor 安装
- Supervisor 配置,经常使用命令
- Supervisor UI管理台
什么是守护进程
在linux或者unix操做系统中,守护进程(Daemon)是一种运行在后台的特殊进程,它独立于控制终端而且周期性的执行某种任务或等待处理某些发生的事件。因为在linux中,每一个系统与用户进行交流的界面称为终端,每个今后终端开始运行的进程都会依附于这个终端,这个终端被称为这些进程的控制终端,当控制终端被关闭的时候,相应的进程都会自动关闭。可是守护进程却能突破这种限制,它脱离于终端而且在后台运行,而且它脱离终端的目的是为了不进程在运行的过程当中的信息在任何终端中显示而且进程也不会被任何终端所产生的终端信息所打断。它从被执行的时候开始运转,直到整个系统关闭才退出。
此处的建立守护进程,是指发布在Linux上 asp.net core 程序的dotnet xxx.dll
命令的宿主进程建立一个守护进程。
在 Linux 上有不少能够管理进程的工具,咱们使用 Supervisor 来作这个事情。
缘由有两点:
一、它是微软官方文档推荐的,下降学习成本。
二、它并不必定是最好的,但必定是文档最全的。
Supervisor 介绍
Supervisor是采用 Python(2.4+) 开发的,它是一个容许用户管理 基于 Unix 系统进程的 Client/Server 系统,提供了大量功能来实现对进程的管理。
Supervisor 安装
在 masOS 中直接使用brew
工具进行安装便可:
brew install supervisor
在 linux 中使用如下命令进行安装:
ubuntu
sudo apt-get install supervisor
centos
yum install supervisor
python
pip install supervosor
easy_install supervisor
安装完成以后:
mac:~ yangxiaodong$ brew install supervisor Warning: supervisor-3.2.1 already installed
Supervisor 配置,经常使用命令
安装完成以后,在 /ect/supervisor/confg.d/
目录下新建一个配置文件(touch HelloWebApp.conf
),取名为 HelloWebApp.conf
打开HelloWebApp.conf (vim HelloWebApp.conf
),写入以下命令:
[program:HelloWebApp] command=dotnet HelloWebApp.dll #要执行的命令 directory=/home/yxd/Workspace/publish #命令执行的目录 environment=ASPNETCORE__ENVIRONMENT=Production #环境变量 user=www-data #进程执行的用户身份 stopsignal=INT autostart=true #是否自动启动 autorestart=true #是否自动重启 startsecs=1 #自动重启间隔 stderr_logfile=/var/log/HelloWebApp.err.log #标准错误日志 stdout_logfile=/var/log/HelloWebApp.out.log #标准输出日志
配置好之后 (:wq
保存退出),须要从新加载一下配置
sudo supervisorctl shutdown && sudo supervisord -c /etc/supervisor/supervisord.conf
或者你能够直接重启 Supervisor:
sudo service supervisor stop sudo service supervisor start
若是启动的时候报错,能够打开位于/etc/log/supervisor/supervisord.log
文件来查看具体的日志。
其中dotnet 命令输出的日志文件分别为位于
/var/log/HelloWebApp.err.log /var/log/HelloWebApp.out.log
在这些文件里面你能够查看程序中的异常信息或者是运行信息。
打开浏览器,输入 http://localhost:5000
发现已经能够浏览了。
Supervisor 经常使用命令
supervisorctl shutdown #关闭全部任务 supervisorctl stop|start program_name supervisorctl status #查看全部任务状态
Supervisor UI 管理台
Supervisor 默认给咱们提供了一个图形界面来供咱们管理进程和任务,在 macOS 中默认配置的有,可是在 Linux 中咱们须要手动开启一下。
打开位于/etc/supervisor/supervisord.conf
文件,添加inet_http_server 节点
而后就能够经过界面来查看运行的进程了:
测试一下
最后,咱们测试一下是否会自动重启,开机自动运行?
一、进程管理中干掉dot net ,发现能够从新启动。如下是日志:
2016-07-09 12:24:18,626 INFO spawned: 'HelloWebApp' with pid 1774 2016-07-09 12:24:19,766 INFO success: HelloWebApp entered RUNNING state, process has stayed up for > than 1 seconds (startsecs) 2016-07-09 12:27:43,208 INFO exited: HelloWebApp (exit status 0; expected) 2016-07-09 12:27:44,223 INFO spawned: 'HelloWebApp' with pid 3687 2016-07-09 12:27:45,243 INFO success: HelloWebApp entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
二、重启机器,发现能够自动运行。