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上就梳理完了,真是一點點的寫,一點點的測試,一點點的查,還是有點喫力的,以後遇到什麼問題可以直接來這裏找了。美好的週末又結束了,週一又要開始了。。。


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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章