守護進程,英文名:「daemon",也有守護神的意思。守護進程是一個在後臺運行而且不受任何終端控制的進程,不會隨着會話結束而退出。諸如 mysql、apache 等這類程序默認就提供了守護進程或者以守護進程的方式工做,咱們熟悉的 「mysqld」、"httpd" 等其中的 d 就是 daemon 的意思。好比咱們在 Linux 系統上以命令 dotnet xxx.dll
運行 .NET Core 應用程序時,若是咱們結束會話,那麼咱們的程序將會結束運行。其緣由是 Linux 系統中有一個信號機制,進程能夠經過一系列信號進行通訊,當用戶結束會話時,會向當前會話的子進程發送一個 HUP 信號,通常狀況下當前會話的子進程收到HUP信號之後就會退出本身。 這時咱們就須要一個守護進程來管控咱們的 .NET Core 應用程序進程。html
Linux 下讓進程後臺方式不少,舉栗子:Supervisor、Screen、nohup 命令 等等。Supervisor 是本身建立了一個守護進程,而後讓咱們的應用程序進程成爲其子進程,經過這種管控方式讓咱們的應用程序後臺運行。nohup 顧名思義,就是不向會話進程發送hup信號。node
在這裏我就搬出本文的主角 pm2,經過 pm2 來讓進程後臺運行。mysql
pm2 從名字上和咱們平時在生活中接觸到的 pm2.5 有點像,不過他們可不是一個東西。作 nodejs 開發的童鞋可能對 pm2 比較熟悉,pm2 是一個高級nodejs進程管理工具。web
看到這裏,可能有童鞋會有疑問,nodejs進程管理工具怎麼管理 .NET Core 進程?博主通過長期的在 Linux 下的摸爬滾打,最終發現使用pm2來守護 .NET Core 進程徹底沒有問題,除了 nodejs 其餘的不少程序都是能夠的。並且無需繁瑣的配置,安裝、使用、管理進程都很是簡單,這是我選擇它的主要緣由。sql
這裏須要說明一下是使用 pm2 來讓進程後臺運行,由於若是不是 nodejs 程序, pm2的一些爲nodejs準備的功能多是沒法使用的,可是對於咱們守護 .NET Core 應用程序足夠了。shell
使用pm2須要安裝nodejs,這個網上不少資料,就再也不本文詳細說明了,我前面寫過一篇在 Centos 7下安裝的文章,傳送門。apache
npm install pm2 -g
就一句話,是否是很簡單。安裝成功之後使用命令 pm2
來檢查是否安裝成功,你會看到以下輸出:npm
------------- __/\\\\\\\\\\\\\____/\\\\____________/\\\\____/\\\\\\\\\_____ _\/\\\/////////\\\_\/\\\\\\________/\\\\\\__/\\\///////\\\___ _\/\\\_______\/\\\_\/\\\//\\\____/\\\//\\\_\///______\//\\\__ _\/\\\\\\\\\\\\\/__\/\\\\///\\\/\\\/_\/\\\___________/\\\/___ _\/\\\/////////____\/\\\__\///\\\/___\/\\\________/\\\//_____ _\/\\\_____________\/\\\____\///_____\/\\\_____/\\\//________ _\/\\\_____________\/\\\_____________\/\\\___/\\\/___________ _\/\\\_____________\/\\\_____________\/\\\__/\\\\\\\\\\\\\\\_ _\///______________\///______________\///__\///////////////__ 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
命令 | 說明 |
---|---|
pm2 startup | 設置pm2開機自啓動 |
pm2 unstartup | 移除pm2開機自啓動 |
pm2 save | 保存當前進程開機自啓動 |
pm2 start <進程啓動命令> [--name <進程名> ] | 啓動應用程序 |
pm2 list | 顯示全部進程狀態 |
pm2 monit | 監控進程 |
pm2 logs [進程id或名字] | 顯示進程日誌 |
pm2 stop [all] | 中止[全部]進程 |
pm2 restart [all] | 重啓[全部]進程 |
pm2 delete [ <進程名或者id> ,all] | 刪除指定[全部]進程 |
pm2 info [進程id或名字] | 查看應用程序信息 |
官方文檔:http://pm2.keymetrics.io/docs/usage/quick-start/#usageapi
# 建立項目 dotnet new webapi --no-https -o testwebapi # 發佈項目 cd testwebapi/ dotnet publish -c Release cd bin/Release/netcoreapp2.1/publish # 運行項目 dotnet testwebapi.dll
運行成功會有以下輸出:app
結束咱們剛剛運行的程序,就在咱們剛剛的目錄執行下面的命令:
pm2 start "dotnet testwebapi.dll" --name testwebapi
執行成功:
咱們能夠清晰的看到咱們的應用程序的 pid、運行狀態、重啓次數(應用程序崩潰重啓/手動重啓)、運行時間、cpu和內存佔用等。十分方便
使用 curl 訪問 api 檢查是否運行成功:
curl http://localhost:5000/api/values
pm2 logs testwebapi
pm2 info testwebapi
pm2 monit testwebapi
pm2 會在你的應用程序異常退出時,自動幫你重啓,所謂異常退出,指退出代碼非0。
測試:
修改 ValueController 添加退出代碼爲1的代碼:
發佈,並使用 pm2 啓動(此處略)。
經過 pm2 list
查詢應用程序重啓次數爲0:
訪問 api 觸發異常退出:
curl http://localhost:5000/api/values
再次經過 pm2 list
命令查詢能夠發現重啓了:
pm2 這個工具相對於 Supervisor 和 nohup 來講,對於Supervisor,沒有配置,不用輸很長的命令;對於 nohup 管理進程方便。歡迎你們與我交流。
CentOS 7 源碼編譯安裝 NodeJS by 曉晨Master