前言 在 "上篇" 文章中介紹瞭如何在 Docker 容器中部署我們的 asp.net core 應用程式,本篇主要是怎麼樣為我們在 Linux 或者 macOs 中部署的 dotnet 程式創建一個守護進程,來保證我們的程式在異常或者是電腦重啟的時候仍然能夠正常訪問。 如果你以後用準備使用 asp ...
前言
在上篇文章中介紹瞭如何在 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 來做這個事情。
原因有兩點:
1、它是微軟官方文檔推薦的,降低學習成本。
2、它並不一定是最好的,但一定是文檔最全的。
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 節點
然後就可以通過界面來查看運行的進程了:
測試一下
最後,我們測試一下是否會自動重啟,開機自動運行?
1、進程管理中幹掉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)
2、重啟機器,發現可以自動運行。
本文地址:http://www.cnblogs.com/savorboard/p/dotnetcore-supervisor.html
作者博客:Savorboard
歡迎轉載,請在明顯位置給出出處及鏈接