轉(zhuǎn)載:使用 pm2 守護(hù)你的 .NET Core 應(yīng)用程序

出處:https://www.cnblogs.com/stulzq/p/9775973.html

一.守護(hù)進(jìn)程的前世今生

守護(hù)進(jìn)程膛壹,英文名:“daemon"眼溶,也有守護(hù)神的意思适揉。守護(hù)進(jìn)程是一個(gè)在后臺(tái)運(yùn)行并且不受任何終端控制的進(jìn)程,不會(huì)隨著會(huì)話結(jié)束而退出塔鳍。諸如 mysql愕乎、apache 等這類程序默認(rèn)就提供了守護(hù)進(jìn)程或者以守護(hù)進(jìn)程的方式工作,我們熟悉的 “mysqld”备禀、"httpd" 等其中的 d 就是 daemon 的意思洲拇。比如我們?cè)?Linux 系統(tǒng)上以命令 dotnet xxx.dll 運(yùn)行 .NET Core 應(yīng)用程序時(shí),如果我們結(jié)束會(huì)話曲尸,那么我們的程序?qū)?huì)結(jié)束運(yùn)行赋续。其原因是 Linux 系統(tǒng)中有一個(gè)信號(hào)機(jī)制,進(jìn)程可以通過一系列信號(hào)進(jìn)行通信另患,當(dāng)用戶結(jié)束會(huì)話時(shí)纽乱,會(huì)向當(dāng)前會(huì)話的子進(jìn)程發(fā)送一個(gè) HUP 信號(hào),一般情況下當(dāng)前會(huì)話的子進(jìn)程收到HUP信號(hào)以后就會(huì)退出自己昆箕。 這時(shí)我們就需要一個(gè)守護(hù)進(jìn)程來管控我們的 .NET Core 應(yīng)用程序進(jìn)程鸦列。

二.讓進(jìn)程后臺(tái)運(yùn)行

Linux 下讓進(jìn)程后臺(tái)方式很多,舉栗子:Supervisor鹏倘、Screen薯嗤、nohup 命令 等等。Supervisor 是自己創(chuàng)建了一個(gè)守護(hù)進(jìn)程纤泵,然后讓我們的應(yīng)用程序進(jìn)程成為其子進(jìn)程骆姐,通過這種管控方式讓我們的應(yīng)用程序后臺(tái)運(yùn)行。nohup 顧名思義捏题,就是不向會(huì)話進(jìn)程發(fā)送hup信號(hào)玻褪。

在這里我就搬出本文的主角 pm2,通過 pm2 來讓進(jìn)程后臺(tái)運(yùn)行公荧。

三. pm2介紹

pm2 從名字上和我們平時(shí)在生活中接觸到的 pm2.5 有點(diǎn)像带射,不過他們可不是一個(gè)東西。做 nodejs 開發(fā)的童鞋可能對(duì) pm2 比較熟悉循狰,pm2 是一個(gè)高級(jí)nodejs進(jìn)程管理工具庸诱。

img

看到這里,可能有童鞋會(huì)有疑問晤揣,nodejs進(jìn)程管理工具怎么管理 .NET Core 進(jìn)程?博主經(jīng)過長期的在 Linux 下的摸爬滾打朱灿,最終發(fā)現(xiàn)使用pm2來守護(hù) .NET Core 進(jìn)程完全沒有問題昧识,除了 nodejs 其他的很多程序都是可以的。而且無需繁瑣的配置盗扒,安裝跪楞、使用缀去、管理進(jìn)程都非常簡單,這是我選擇它的主要原因甸祭。

這里需要說明一下是使用 pm2 來讓進(jìn)程后臺(tái)運(yùn)行缕碎,因?yàn)槿绻皇?nodejs 程序, pm2的一些為nodejs準(zhǔn)備的功能可能是無法使用的池户,但是對(duì)于我們守護(hù) .NET Core 應(yīng)用程序足夠了咏雌。

四.pm2的安裝以及使用

4.1 安裝

4.1.1 安裝 nodejs

使用pm2需要安裝nodejs,這個(gè)網(wǎng)上很多資料校焦,就不再本文詳細(xì)說明了赊抖,我前面寫過一篇在 Centos 7下安裝的文章,傳送門寨典。

4.1.2 安裝 pm2

npm install pm2 -g

就一句話氛雪,是不是很簡單。安裝成功以后使用命令 pm2來檢查是否安裝成功耸成,你會(huì)看到如下輸出:


                        -------------

__/\\\\\\\\\\\\\____/\\\\____________/\\\\____/\\\\\\\\\_____
 _\/\\\/////////\\\_\/\\\\\\________/\\\\\\__/\\\///////\\\___
  _\/\\\_______\/\\\_\/\\\//\\\____/\\\//\\\_\///______\//\\\__
   _\/\\\\\\\\\\\\\/__\/\\\\///\\\/\\\/_\/\\\___________/\\\/___
    _\/\\\/////////____\/\\\__\///\\\/___\/\\\________/\\\//_____
     _\/\\\_____________\/\\\____\///_____\/\\\_____/\\\//________
      _\/\\\_____________\/\\\_____________\/\\\___/\\\/___________
       _\/\\\_____________\/\\\_____________\/\\\__/\\\\\\\\\\\\\\\_
        _\///______________\///______________\///__\///////////////__

                          Runtime Edition

        PM2 is a Production Process Manager for Node.js applications
                     with a built-in Load Balancer.

                Start and Daemonize any application:
                $ pm2 start app.js

                Load Balance 4 instances of api.js:
                $ pm2 start api.js -i 4

                Monitor in production:
                $ pm2 monitor

                Make pm2 auto-boot at server restart:
                $ pm2 startup

                To go further checkout:
                http://pm2.io/

                        -------------

usage: pm2 [options] <command>

pm2 -h, --help             all available commands and options
pm2 examples               display pm2 usage examples
pm2 <command> -h           help on a specific command

Access pm2 files in ~/.pm2

4.2 使用

4.2.1 常用命令

命令 說明
pm2 startup 設(shè)置pm2開機(jī)自啟動(dòng)
pm2 unstartup 移除pm2開機(jī)自啟動(dòng)
pm2 save 保存當(dāng)前進(jìn)程開機(jī)自啟動(dòng)
pm2 start <進(jìn)程啟動(dòng)命令> [--name <進(jìn)程名>] 啟動(dòng)應(yīng)用程序
pm2 list 顯示所有進(jìn)程狀態(tài)
pm2 monit 監(jiān)控進(jìn)程
pm2 logs [進(jìn)程id或名字] 顯示進(jìn)程日志
pm2 stop [all] 停止[所有]進(jìn)程
pm2 restart [all] 重啟[所有]進(jìn)程
pm2 delete [<進(jìn)程名或者id>,all] 刪除指定[所有]進(jìn)程
pm2 info [進(jìn)程id或名字] 查看應(yīng)用程序信息

官方文檔:http://pm2.keymetrics.io/docs/usage/quick-start/#usage

五. 使用 pm2 守護(hù) ASP.NET Core 應(yīng)用程序

5.1 創(chuàng)建一個(gè) webapi 項(xiàng)目

# 創(chuàng)建項(xiàng)目
dotnet new webapi --no-https -o testwebapi
# 發(fā)布項(xiàng)目
cd testwebapi/
dotnet publish -c Release
cd bin/Release/netcoreapp2.1/publish
# 運(yùn)行項(xiàng)目
dotnet testwebapi.dll

運(yùn)行成功會(huì)有如下輸出:

1539275616184

5.2 使用pm2守護(hù)

5.2.1 啟動(dòng)

結(jié)束我們剛剛運(yùn)行的程序报亩,就在我們剛剛的目錄執(zhí)行下面的命令:

pm2 start "dotnet testwebapi.dll" --name testwebapi

執(zhí)行成功:

1539275651121

我們可以清晰的看到我們的應(yīng)用程序的 pid、運(yùn)行狀態(tài)井氢、重啟次數(shù)(應(yīng)用程序崩潰重啟/手動(dòng)重啟)弦追、運(yùn)行時(shí)間、cpu和內(nèi)存占用等毙沾。十分方便

使用 curl 訪問 api 檢查是否運(yùn)行成功:

curl http://localhost:5000/api/values
1539275952810

5.2.2 查看日志

pm2 logs testwebapi
1539275702867

5.2.3 查看應(yīng)用程序信息

pm2 info testwebapi
1539275756689

5.2.4 監(jiān)控應(yīng)用程序

pm2 monit testwebapi
1539275847838

5.2.3 重啟策略

pm2 會(huì)在你的應(yīng)用程序異常退出時(shí)骗卜,自動(dòng)幫你重啟,所謂異常退出左胞,指退出代碼非0寇仓。

測(cè)試:

修改 ValueController 添加退出代碼為1的代碼:

1539276422702

發(fā)布,并使用 pm2 啟動(dòng)(此處略)烤宙。

通過 pm2 list查詢應(yīng)用程序重啟次數(shù)為0:

1539276519474

訪問 api 觸發(fā)異常退出:

curl http://localhost:5000/api/values

再次通過 pm2 list命令查詢可以發(fā)現(xiàn)重啟了:

1539276596156

六.結(jié)束

pm2 這個(gè)工具相對(duì)于 Supervisor 和 nohup 來說遍烦,對(duì)于Supervisor,沒有配置躺枕,不用輸很長的命令服猪;對(duì)于 nohup 管理進(jìn)程方便。歡迎大家與我交流拐云。

pm2官方文檔

CentOS 7 源碼編譯安裝 NodeJS by 曉晨Master

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末罢猪,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子叉瘩,更是在濱河造成了極大的恐慌膳帕,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,290評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件薇缅,死亡現(xiàn)場(chǎng)離奇詭異危彩,居然都是意外死亡攒磨,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門汤徽,熙熙樓的掌柜王于貴愁眉苦臉地迎上來娩缰,“玉大人,你說我怎么就攤上這事谒府∑纯玻” “怎么了?”我有些...
    開封第一講書人閱讀 156,872評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵狱掂,是天一觀的道長演痒。 經(jīng)常有香客問我,道長趋惨,這世上最難降的妖魔是什么鸟顺? 我笑而不...
    開封第一講書人閱讀 56,415評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮器虾,結(jié)果婚禮上讯嫂,老公的妹妹穿的比我還像新娘。我一直安慰自己兆沙,他們只是感情好欧芽,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,453評(píng)論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著葛圃,像睡著了一般千扔。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上库正,一...
    開封第一講書人閱讀 49,784評(píng)論 1 290
  • 那天曲楚,我揣著相機(jī)與錄音,去河邊找鬼褥符。 笑死龙誊,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的喷楣。 我是一名探鬼主播趟大,決...
    沈念sama閱讀 38,927評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼铣焊!你這毒婦竟也來了逊朽?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,691評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤曲伊,失蹤者是張志新(化名)和其女友劉穎惋耙,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,137評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡绽榛,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,472評(píng)論 2 326
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了婿屹。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片灭美。...
    茶點(diǎn)故事閱讀 38,622評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖昂利,靈堂內(nèi)的尸體忽然破棺而出届腐,到底是詐尸還是另有隱情,我是刑警寧澤蜂奸,帶...
    沈念sama閱讀 34,289評(píng)論 4 329
  • 正文 年R本政府宣布犁苏,位于F島的核電站,受9級(jí)特大地震影響扩所,放射性物質(zhì)發(fā)生泄漏围详。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,887評(píng)論 3 312
  • 文/蒙蒙 一祖屏、第九天 我趴在偏房一處隱蔽的房頂上張望助赞。 院中可真熱鬧,春花似錦袁勺、人聲如沸雹食。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽群叶。三九已至,卻和暖如春钝荡,著一層夾襖步出監(jiān)牢的瞬間街立,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來泰國打工化撕, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留几晤,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,316評(píng)論 2 360
  • 正文 我出身青樓植阴,卻偏偏與公主長得像蟹瘾,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子掠手,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,490評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容