您好,登錄后才能下訂單哦!
本篇內(nèi)容介紹了“在Linux下怎么為dotnet創(chuàng)建守護(hù)進(jìn)程”的有關(guān)知識(shí),在實(shí)際案例的操作過(guò)程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
在linux或者unix操作系統(tǒng)中,守護(hù)進(jìn)程(Daemon)是一種運(yùn)行在后臺(tái)的特殊進(jìn)程,它獨(dú)立于控制終端并且周期性的執(zhí)行某種任務(wù)或等待處理某些發(fā)生的事件。由于在linux中,每個(gè)系統(tǒng)與用戶(hù)進(jìn)行交流的界面稱(chēng)為終端,每一個(gè)從此終端開(kāi)始運(yùn)行的進(jìn)程都會(huì)依附于這個(gè)終端,這個(gè)終端被稱(chēng)為這些進(jìn)程的控制終端,當(dāng)控制終端被關(guān)閉的時(shí)候,相應(yīng)的進(jìn)程都會(huì)自動(dòng)關(guān)閉。但是守護(hù)進(jìn)程卻能突破這種限制,它脫離于終端并且在后臺(tái)運(yùn)行,并且它脫離終端的目的是為了避免進(jìn)程在運(yùn)行的過(guò)程中的信息在任何終端中顯示并且進(jìn)程也不會(huì)被任何終端所產(chǎn)生的終端信息所打斷。它從被執(zhí)行的時(shí)候開(kāi)始運(yùn)轉(zhuǎn),直到整個(gè)系統(tǒng)關(guān)閉才退出。
此處的創(chuàng)建守護(hù)進(jìn)程,是指發(fā)布在Linux上 asp.net core 程序的dotnet xxx.dll
命令的宿主進(jìn)程創(chuàng)建一個(gè)守護(hù)進(jìn)程。
在 Linux 上有很多可以管理進(jìn)程的工具,我們使用 Supervisor 來(lái)做這個(gè)事情。
原因有兩點(diǎn):
1、它是微軟官方文檔推薦的,降低學(xué)習(xí)成本。
2、它并不一定是最好的,但一定是文檔最全的。
Supervisor是采用 Python(2.4+) 開(kāi)發(fā)的,它是一個(gè)允許用戶(hù)管理 基于 Unix 系統(tǒng)進(jìn)程的 Client/Server 系統(tǒng),提供了大量功能來(lái)實(shí)現(xiàn)對(duì)進(jìn)程的管理。
官方文檔:http://supervisord.org/
在 masOS 中直接使用brew
工具進(jìn)行安裝即可:
brew install supervisor
在 linux 中使用以下命令進(jìn)行安裝:
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
安裝完成之后,在/ect/supervisor/conf.d/
目錄下新建一個(gè)配置文件(touch HelloWebApp.conf
),取名為HelloWebApp.conf
打開(kāi)HelloWebApp.conf (vim HelloWebApp.conf
),寫(xiě)入如下命令:
[program:HelloWebApp] command=dotnet HelloWebApp.dll #要執(zhí)行的命令 directory=/home/yxd/Workspace/publish #命令執(zhí)行的目錄 environment=ASPNETCORE__ENVIRONMENT=Production #環(huán)境變量 user=www-data #進(jìn)程執(zhí)行的用戶(hù)身份 stopsignal=INT autostart=true #是否自動(dòng)啟動(dòng) autorestart=true #是否自動(dòng)重啟 startsecs=1 #自動(dòng)重啟間隔 stderr_logfile=/var/log/HelloWebApp.err.log #標(biāo)準(zhǔn)錯(cuò)誤日志 stdout_logfile=/var/log/HelloWebApp.out.log #標(biāo)準(zhǔn)輸出日志
配置好以后 (:wq
保存退出),需要重新加載一下配置
sudo supervisorctl shutdown && sudo supervisord -c /etc/supervisor/supervisord.conf
或者你可以直接重啟 Supervisor:
sudo service supervisor stop sudo service supervisor start
如果啟動(dòng)的時(shí)候報(bào)錯(cuò),可以打開(kāi)位于/etc/log/supervisor/supervisord.log
文件來(lái)查看具體的日志。
其中dotnet 命令輸出的日志文件分別為位于
/var/log/HelloWebApp.err.log /var/log/HelloWebApp.out.log
在這些文件里面你可以查看程序中的異常信息或者是運(yùn)行信息。
打開(kāi)瀏覽器,輸入http://localhost:5000
發(fā)現(xiàn)已經(jīng)可以瀏覽了。
Supervisor 常用命令
supervisorctl shutdown #關(guān)閉所有任務(wù) supervisorctl stop|start program_name supervisorctl status #查看所有任務(wù)狀態(tài)
Supervisor 默認(rèn)給我們提供了一個(gè)圖形界面來(lái)供我們管理進(jìn)程和任務(wù),在 macOS 中默認(rèn)配置的有,但是在 Linux 中我們需要手動(dòng)開(kāi)啟一下。
打開(kāi)位于/etc/supervisor/supervisord.conf
文件,添加inet_http_server 節(jié)點(diǎn)
然后就可以通過(guò)界面來(lái)查看運(yùn)行的進(jìn)程了:
測(cè)試一下
最后,我們測(cè)試一下是否會(huì)自動(dòng)重啟,開(kāi)機(jī)自動(dòng)運(yùn)行?
1、進(jìn)程管理中干掉dot net ,發(fā)現(xiàn)可以重新啟動(dòng)。以下是日志:
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、重啟機(jī)器,發(fā)現(xiàn)可以自動(dòng)運(yùn)行。
“在Linux下怎么為dotnet創(chuàng)建守護(hù)進(jìn)程”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。