目錄
1.前言
2.環境和軟件的準備
3.建立.NET Core API項目
4.VMware Workstation虛擬機及Centos 7安裝
5.Centos 7安裝.NET Core環境
6.發佈.NET Core項目到Linux
7.啓動和中止.NET Core項目
8.爲.NET Core項目建立Supervisor進程守護監控
9.防火牆配置,容許外網或局域網訪問.NET Core站點
10.總結
在linux或者unix操做系統中,守護進程(Daemon)是一種運行在後臺的特殊進程,它獨立於控制終端而且週期性的執行某種任務或等待處理某些發生的事件。因爲在linux中,每一個系統與用戶進行交流的界面稱爲終端,每個今後終端開始運行的進程都會依附於這個終端,這個終端被稱爲這些進程的控制終端,當控制終端被關閉的時候,相應的進程都會自動關閉。可是守護進程卻能突破這種限制,它脫離於終端而且在後臺運行,而且它脫離終端的目的是爲了不進程在運行的過程當中的信息在任何終端中顯示而且進程也不會被任何終端所產生的終端信息所打斷。它從被執行的時候開始運轉,直到整個系統關閉才退出。html
此處的建立守護進程,是指發佈在Linux上 asp.net core 程序的dotnet xxx.dll命令的宿主進程建立一個守護進程。在 Linux 上有不少能夠管理進程的工具,咱們使用 Supervisor 來作這個事情。python
緣由有兩點:
①、它是微軟官方文檔推薦的,下降學習成本。
②、它並不必定是最好的,但必定是文檔最全的。linux
#執行epel-release sudo yum -y install epel-release #安裝Supervisor sudo yum -y install supervisor #經過配置文件來啓動supervisor sudo supervisord -c /etc/supervisord.conf #啓動supervisorctl sudo supervisorctl -c /etc/supervisord.conf #查看supervisor 版本 version
這裏直接執行安裝Supervisor,可能會出現沒有可用軟件包 supervisor,這個時候須要安裝一個叫」epel-release」的軟件包,這個軟件包會自動配置yum的軟件倉庫vim
注意:須要執行supervisorctl,若是出現error: <class 'socket.error'>, [Errno 13] Permission denied: file: /usr/lib64/python2.7/socket.py line: 224的錯誤,須要先執行下面語句:
sudo supervisord -c /etc/supervisord.conf
sudo supervisorctl -c /etc/supervisord.conf
而後在去執行須要的操做,以下圖:asp.net
#進入supervisord.d目錄 cd /etc/supervisord.d #新建NetCore進程配置文件 sudo touch DemoNetCore.ini #查看和編輯DemoNetCore.ini配置文件 sudo vim DemoNetCore.ini #進入文件後,按「i」或者「a」進入插入模式,插入下面的配置信息
#配置程序名稱 [program:DemoNetCore] #運行程序的命令 command=dotnet Demo.Net.Core.dll --urls="http://*:8081;http://*:8082" #命令執行的目錄 directory=/var/www #進程環境變量 environment=ASPNETCORE_ENVIRONMENT=Production #進程執行的用戶身份 user=demo #進程中止信號,能夠爲TERM, HUP, INT, QUIT, KILL, USR1, or USR2等信號默認爲TERM 。當用設定的信號去幹掉進程,退出碼會被認爲是expected,非必須設置 stopsignal=INT #若是是true的話,子進程將在supervisord啓動後被自動啓動,默認就是true,非必須設置 autostart=true #這個是設置子進程掛掉後自動重啓的狀況,有三個選項,false,unexpected和true。若是爲false的時候,不管什麼狀況下,都不會被從新啓動,若是爲unexpected,只有當進程的退出碼不在下面的exitcodes裏面定義的退出碼的時候,纔會被自動重啓。當爲true的時候,只要子進程掛掉,將會被無條件的重啓 autorestart=true #這個選項是子進程啓動多少秒以後,此時狀態若是是running,則咱們認爲啓動成功了,默認值爲1 。非必須設置 startsecs=1 #錯誤日誌文件 stderr_logfile=/var/log/DemoNetCore.err.log #輸出日誌文件 stdout_logfile=/var/log/DemoNetCore.out.log
#按ESC,輸入命令保存配置文件 :wq (保存編輯操做退出) :wq! (保存編輯強制退出) :w ! sudo tee %
注意:若是以前進入編輯文件沒有在root或者sudo下,使用wq,將會提示只讀,使用強制執行,使用wq!,將會提示E212:沒法打開或寫入文件,這個時候須要用到w ! sudo tee %這個命令,而後在q退出編輯python2.7
從新加載Supervisor配置,查看Supervisor運行的進程curl
#經過配置文件來啓動supervisor sudo supervisord -c /etc/supervisord.conf #啓動supervisorctl sudo supervisorctl -c /etc/supervisord.conf #從新加載配置文件 reload #查看運行的狀態 status
下面咱們來測試下站點是否運行正常socket
#查看相關進行 ps -aux | grep "Demo.Net.Core.dll" #訪問啓動的站點 curl http://localhost:8081/weatherforecast
以下圖,Supervisor已經開啓了Dotnet的進程,訪問接口地址,返回數據成功工具
注意:這裏有個問題就是,當Linux系統關機後,Supervisor可能不會本身開啓,致使須要手動執行sudo supervisord -c /etc/supervisord.conf 命令以後,Dotnet進程纔會自動啓動,這樣與咱們須要達到的效果相差甚遠,解決方法看下面第三步。學習
#進入system目錄 cd /usr/lib/systemd/system #編輯supervisord.service文件 sudo vim supervisord.service
supervisord.service文件內容以下
[Unit] Description=Process Monitoring and Control Daemon After=rc-local.service nss-user-lookup.target [Service] Type=forking ExecStart=/usr/bin/supervisord -c /etc/supervisord.conf ExecStop=/usr/bin/supervisorctl shutdown ExecReload=/usr/bin/supervisorctl reload KillMode=process Restart=on-failure RestartSec=42 [Install] WantedBy=multi-user.target
編輯好後保存退出,而後執行命令,查看是否啓動成功
#啓動服務 systemctl enable supervisord #驗證一下是否爲開機啓動 systemctl is-enabled supervisord
直接幹掉Dotnet進程,看看會不會自動啓動
#查看dotnet進程 ps -aux|grep dotnet #強制殺死dotnet進程 kill -9 %PID #再次查看dotnet進程 ps -aux|grep dotnet
重啓Linux,而後直接訪問站點
# 啓動全部
supervisorctl start all
# 重啓全部
supervisorctl restart all
# 中止全部
supervisorctl stop all
#PS:要操做某個服務,把all換成服務名便可
#查看服務狀態
supervisorctl status