ASP.NET Core在Linux下為dotnet創建守護進程

什麼是守護進程

在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=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、重啟機器,發現可以自動運行。

到此這篇關於ASP.NET Core在Linux下為dotnet創建守護進程的文章就介紹到這瞭。希望對大傢的學習有所幫助,也希望大傢多多支持WalkonNet。

推薦閱讀: