ASP.NET Core Linux下为 dotnet 创建守护进程(必备知识)
前言
在上篇文章中《ASP.NET Core Docker部署》中介紹了如何在 Docker 容器中部署我們的 asp.net core 應(yīng)用程序,本篇主要是怎么樣為我們在 Linux 或者 macOs 中部署的 dotnet 程序創(chuàng)建一個守護進程,來保證我們的程序在異常或者是電腦重啟的時候仍然能夠正常訪問。
如果你以后用準(zhǔn)備使用 asp.net core來開發(fā)項目的話,程序并且部署到 Linux 上的話,那么此篇文章你值得收藏。
如果你覺得對你有幫助的話,不妨點個【推薦】。
目錄
什么是守護進程
Supervisor 介紹
Supervisor 安裝
Supervisor 配置,常用命令
Supervisor UI管理臺
什么是守護進程
在linux或者unix操作系統(tǒng)中,守護進程(Daemon)是一種運行在后臺的特殊進程,它獨立于控制終端并且周期性的執(zhí)行某種任務(wù)或等待處理某些發(fā)生的事件。由于在linux中,每個系統(tǒng)與用戶進行交流的界面稱為終端,每一個從此終端開始運行的進程都會依附于這個終端,這個終端被稱為這些進程的控制終端,當(dāng)控制終端被關(guān)閉的時候,相應(yīng)的進程都會自動關(guān)閉。但是守護進程卻能突破這種限制,它脫離于終端并且在后臺運行,并且它脫離終端的目的是為了避免進程在運行的過程中的信息在任何終端中顯示并且進程也不會被任何終端所產(chǎn)生的終端信息所打斷。它從被執(zhí)行的時候開始運轉(zhuǎn),直到整個系統(tǒng)關(guān)閉才退出。
此處的創(chuàng)建守護進程,是指發(fā)布在Linux上 asp.net core 程序的dotnet xxx.dll命令的宿主進程創(chuàng)建一個守護進程。
在 Linux 上有很多可以管理進程的工具,我們使用 Supervisor 來做這個事情。
原因有兩點:
1、它是微軟官方文檔推薦的,降低學(xué)習(xí)成本。
2、它并不一定是最好的,但一定是文檔最全的。
Supervisor 介紹
Supervisor是采用 Python(2.4+) 開發(fā)的,它是一個允許用戶管理 基于 Unix 系統(tǒng)進程的 Client/Server 系統(tǒng),提供了大量功能來實現(xiàn)對進程的管理。
官方文檔: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 supervisorWarning: supervisor-3.2.1 already installedSupervisor 配置,常用命令
安裝完成之后,在?/ect/supervisor/confg.d/?目錄下新建一個配置文件(touch HelloWebApp.conf),取名為?HelloWebApp.conf
打開HelloWebApp.conf (vim HelloWebApp.conf),寫入如下命令:
[program:HelloWebApp]command=dotnet HelloWebApp.dll ?#要執(zhí)行的命令directory=/home/yxd/Workspace/publish #命令執(zhí)行的目錄environment=ASPNETCORE__ENVIRONMENT=Production #環(huán)境變量user=www-data ?#進程執(zhí)行的用戶身份stopsignal=INTautostart=true #是否自動啟動autorestart=true #是否自動重啟startsecs=1 #自動重啟間隔stderr_logfile=/var/log/HelloWebApp.err.log #標(biāo)準(zhǔn)錯誤日志stdout_logfile=/var/log/HelloWebApp.out.log #標(biāo)準(zhǔn)輸出日志配置好以后 (:wq保存退出),需要重新加載一下配置
sudo supervisorctl shutdown && sudo supervisord -c /etc/supervisor/supervisord.conf
或者你可以直接重啟 Supervisor:
sudo service supervisor stopsudo service supervisor start如果啟動的時候報錯,可以打開位于/etc/log/supervisor/supervisord.log文件來查看具體的日志。
其中dotnet 命令輸出的日志文件分別為位于
/var/log/HelloWebApp.err.log/var/log/HelloWebApp.out.log在這些文件里面你可以查看程序中的異常信息或者是運行信息。
打開瀏覽器,輸入?http://localhost:5000?發(fā)現(xiàn)已經(jīng)可以瀏覽了。
Supervisor 常用命令
supervisorctl shutdown #關(guān)閉所有任務(wù)supervisorctl stop|start program_namesupervisorctl status #查看所有任務(wù)狀態(tài)Supervisor UI 管理臺
Supervisor 默認給我們提供了一個圖形界面來供我們管理進程和任務(wù),在 macOS 中默認配置的有,但是在 Linux 中我們需要手動開啟一下。
打開位于/etc/supervisor/supervisord.conf文件,添加inet_http_server 節(jié)點
然后就可以通過界面來查看運行的進程了:
測試一下
最后,我們測試一下是否會自動重啟,開機自動運行?
1、進程管理中干掉dot net ,發(fā)現(xiàn)可以重新啟動。以下是日志:
2016-07-09 12:24:18,626 INFO spawned: 'HelloWebApp' with pid 17742016-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)
2、重啟機器,發(fā)現(xiàn)可以自動運行。
原文地址:http://www.cnblogs.com/savorboard/p/dotnetcore-supervisor.html
.NET社區(qū)新聞,深度好文,微信中搜索dotNET跨平臺或掃描二維碼關(guān)注
總結(jié)
以上是生活随笔為你收集整理的ASP.NET Core Linux下为 dotnet 创建守护进程(必备知识)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用Visual Studio Code
- 下一篇: 微软开源PowerShell并支持Lin