1. 程式人生 > >2017-03-05 CentOS中配置守護服務(Supervisor)監聽dotnet core web程式的執行

2017-03-05 CentOS中配置守護服務(Supervisor)監聽dotnet core web程式的執行

我們繼續解決上篇部落格的問題,我這個人有個毛病,不喜歡遺留什麼問題,也不喜歡問題說不明白,具體要怎麼解決一定要詳盡,因為經常自己遇到問題的時候,去翻別人的部落格,就會遇到這樣的問題,很苦惱,又說廢話了。

我們一直踩在巨人的肩膀上前行!!!

這篇部落格中介紹一個新的名詞“Supervisor”,翻譯過來應該是超級使用者的意思,在電腦裡面這個超級使用者可是非常NB的,它什麼都管,那麼就說一下我們要用到的這個“超級使用者”,Supervisor是用Python開發的一套通用的程序管理程式,能將一個普通的命令列程序變為後臺的守護程序,並實時監控程序的狀態,一旦發現程序死掉了,立馬就去重啟它。這不正是我們想要的嗎。寫到這兒了突然發現了個問題,那就再扯會兒蛋。以下為扯淡內容,與本篇部落格的內容無關。。。

微軟真的發生了太大的變化,做.net的這幾年真的可謂飽受爭議,在我們這個國家的大環境下,就程式語言來說,Java無一例外是佔了上風的,我們不說C/C++,就拿Java來說,身邊不少的人,有好多都是從C#轉了Java,導致現在.net行業不景氣,記得之前跟同學吃飯,碰到一個他的同學,說了幾句話,問了下做什麼的,同學說也是搞程式設計的,我真的是問都不用問,毋庸置疑肯定是Java的,真的是太多了,從各大培訓機構陸續的停止.Net培訓,比如傳智播客(不過聽說楊中科老師從傳智播客出去後,自己成立了公司,自己搞了,這真的是大情懷啊!)。我們可以去看各大網站的程式語言排名,C#一直都是4,5,6名,Java好像一直處於頂峰,雖說同樣都是面向物件的程式語言,哈哈問個問題‘什麼是面向物件?“,答”世間萬物皆為物件“!很大程度上C#並不像是一門語言,而是一個工具,所以普遍認為C#的入門要比Java簡單的多,當初為什麼選擇了.net方向,其實一開始選專業的時候,真的對計算機程式設計是一竅不通,更不懂選什麼方向了,但因為專業搭配的問題,不得不選擇了這個方向。。。又扯遠了!當然.net目前發展到今天,跟微軟的高層是有緊密的聯絡的,微軟的上一代CEO是仇視Linux的,也經常聽同事說,自從納德拉擔任CEO後,微軟的股票真的是一路飆升,可以看下面這張圖:

為什麼說到了這裡,因為真的是切身感受到微軟確實發生了不少變化,今天我們將我們的.net程式放到了Linux上,Mac上,今天我們使用C#做移動跨平臺開發,而在以前鮑爾默稱”Linux是癌症“,納德拉卻說”微軟愛Linux“,所以說微軟的高層決定了今天的微軟,CoreOS的執行長說:”我從未想到自己會出現在微軟的釋出會上,而且還能聽到微軟的CEO說他們愛Linux。“dotnet core的推出讓我們這些熱愛.net的人又看到了新的希望,在2016年的騰訊程式碼報告中,C#和Asp.Net 的排名也有所提升


當然還有網易,將自己的手遊的後端使用.net core替代了Java,這些都推動了.net的發展,微軟也漸漸的走向了開源化,在ipad版的office,收購Xamarin,擁抱Linux,Visual Studio Code的釋出,不久的Sql  Server For Linux,dotnet core 2.0的正式釋出,我們相信微軟會越來越好,.net也會越來越好,再配一張"川普"的推文(雖然是P的)


Make .NET Great Again. 扯淡結束。。。

回到我們的正題,首先安裝Supervisor,命令為:

yum install python-setuptools

easy_install supervisor


可以看到第一條命令執行時,提示已經安裝了python工具並且是最新版本,下一條命令應該也是成功執行了,下面繼續配置Supervisor,命令為:

mkdir /etc/supervisor

echo_supervisord_conf > /etc/supervisor/supervisord.conf

修改配置檔案supervisord.conf,真的是很討厭在命令列中去修改內容,我還是直接找到原始檔,使用WinSCP有好處是可以直接找到原始檔然後修改,不過建議大家先下載到本地備份,萬一改亂套了比較麻煩,儘量不要在伺服器直接改,修改如下:將最後一行修改為:注意一定要去掉前面的分號,儲存完成。注意這個*.conf也可以改成*.ini。下面配置對ASP.Net Core應用的守護

建立一個DotNetCoreWebDemo01.conf檔案,配置如下:

[program:DotNetCoreWebDemo01]
command=dotnet DotNetCoreWebDemo01.dll ; 執行程式的命令
directory=/root/DotNetCoreWebDemo01/ ; 命令執行的目錄
autorestart=true ; 程式意外退出是否自動重啟
stderr_logfile=/var/log/DotNetCoreWebDemo01.err.log ; 錯誤日誌文;件
stdout_logfile=/var/log/DotNetCoreWebDemo01.out.log ; 輸出日誌檔案
environment=ASPNETCORE_ENVIRONMENT=Production ; 程序環境變數
user=root ; 程序執行的使用者身份
stopsignal=INT
每一句後面都加了註釋,根據自己的實際情況配置即可,本地建立完成後,我們將他拷貝到/etc/supervisor/conf.d資料夾下,就是我們剛剛在上面配置的files 的值的資料夾下,如果不存在conf.d資料夾,自己手動建立即可,還有如果你配置的是*.ini,那麼就將配置副檔名改為.ini,對應即可,下面執行命令

 supervisord -c /etc/supervisor/supervisord.conf

 ps -ef | grep DotNetCoreWebDemo01

存在dotnet DotNetCoreWebDemo01.dll程序就代表已經啟動了,如果出現下面的情況:


則需要將剛才的配置進行reload,重新生效,命令為 supervisorctl reload,然後再執行 ps -ef | grep DotNetCoreWebDemo01,我們現在再執行下Web,沒問題成功了,下面我們把這個守護神設為開機啟動,以後就不需要擔心Web關掉了。真的是要被這些命令折磨吐了!!!堅持!!!!

建立supervisord.service檔案,檔案配置如下:

# dservice for systemd (CentOS 7.0+)
# by ET-CS (https://github.com/ET-CS)
[Unit]
Description=Supervisor daemon

[Service]
Type=forking
ExecStart=/usr/bin/supervisord -c /etc/supervisor/supervisord.conf
ExecStop=/usr/bin/supervisorctl shutdown
ExecReload=/usr/bin/supervisorctl reload
KillMode=process
Restart=on-failure
RestartSec=42s

[Install]
WantedBy=multi-user.target
然後儲存,放到檔案目錄 

/usr/lib/systemd/system下

執行命令 :

systemctl enable supervisord 

設為開機啟動,執行命令 :

systemctl is-enabled supervisord  檢視是否已經為開機啟動

以上全部配置完成了,自己可以重啟下伺服器然後驗證下。

至此如何將dotnet core Web部署到Linux上就梳理完了,真是一點點的寫,一點點的測試,一點點的查,還是有點吃力的,以後遇到什麼問題可以直接來這裡找了。美好的週末又結束了,週一又要開始了。。。


回頭仰望,生活還是很美好!