原文:https://www.cnblogs.com/savorboard/p/dotnetcore-supervisor.html
什么是守护进程
在linux或者unix操作系统中,守护进程(Daemon)是一种运行在后台的特殊进程,它独立于控制终端并且周期性的执行某种任务或等待处理某些发生的事件。由于在linux中,每个系统与用户进行交流的界面称为终端,每一个从此终端开始运行的进程都会依附于这个终端,这个终端被称为这些进程的控制终端,当控制终端被关闭的时候,相应的进程都会自动关闭。但是守护进程却能突破这种限制,它脱离于终端并且在后台运行,并且它脱离终端的目的是为了避免进程在运行的过程中的信息在任何终端中显示并且进程也不会被任何终端所产生的终端信息所打断。它从被执行的时候开始运转,直到整个系统关闭才退出。此处的创建守护进程,是指发布在Linux上 asp.net core 程序的dotnet xxx.dll命令的宿主进程创建一个守护进程。
在 Linux 上有很多可以管理进程的工具,我们使用 Supervisor 来做这个事情。 原因有两点: 1、它是微软官方文档推荐的,降低学习成本。 2、它并不一定是最好的,但一定是文档最全的。 Supervisor 介绍
Supervisor是采用 Python(2.4+) 开发的,它是一个允许用户管理 基于 Unix 系统进程的 Client/Server 系统,提供了大量功能来实现对进程的管理。
官方文档:http://supervisord.org/ 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/conf.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=root #进程执行的用户身份 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
在这些文件里面你可以查看程序中的异常信息或者是运行信息。
Supervisor 常用命令
supervisorctl shutdown #关闭所有任务
supervisorctl stop|start program_name
supervisorctl status #查看所有任务状态