?
This document uses PHP Chinese website manual Release
當(dāng)您運(yùn)行用于生產(chǎn)的Express應(yīng)用程序時(shí),使用流程管理器來實(shí)現(xiàn)以下任務(wù)會(huì)很有幫助:
如果崩潰,請(qǐng)自動(dòng)重新啟動(dòng)應(yīng)用程序。
深入了解運(yùn)行時(shí)性能和資源消耗。
動(dòng)態(tài)修改設(shè)置以提高性能。
控制集群。
流程管理器有點(diǎn)像應(yīng)用程序服務(wù)器:它是便于部署的應(yīng)用程序的“容器”,提供高可用性,并使您能夠在運(yùn)行時(shí)管理應(yīng)用程序。
Express和其他Node.js應(yīng)用程序最流行的進(jìn)程管理器如下所示:
StrongLoop Process Manager
PM2
Forever
SystemD
但是,使用這四種工具中的任何一種都可能非常有用,但StrongLoop Process Manager是唯一提供全面的運(yùn)行時(shí)和部署解決方案的工具,該解決方案可解決整個(gè)Node.js應(yīng)用程序生命周期,其中包括生產(chǎn)前后每一步的工具,統(tǒng)一的界面。
這里簡(jiǎn)要介紹一下這些工具。有關(guān)詳細(xì)比較,請(qǐng)參閱http://strong-pm.io/compare/。
StrongLoop過程管理器(StrongLoop PM)是Node.js應(yīng)用程序的生產(chǎn)過程管理器。StrongLoop PM具有內(nèi)置負(fù)載平衡,監(jiān)控和多主機(jī)部署以及圖形控制臺(tái)。您可以使用StrongLoop PM進(jìn)行以下任務(wù):
構(gòu)建,打包并將Node.js應(yīng)用程序部署到本地或遠(yuǎn)程系統(tǒng)。
查看CPU配置文件和堆快照以優(yōu)化性能并診斷內(nèi)存泄漏。
讓進(jìn)程和集群永遠(yuǎn)活著。
查看應(yīng)用程序的性能指標(biāo)。
使用Nginx集成輕松管理多主機(jī)部署。
將多個(gè)StrongLoop PM統(tǒng)一到從Arc管理的分布式微服務(wù)運(yùn)行時(shí)。
您可以使用稱為的強(qiáng)大的命令行界面工具slc
或稱為Arc的圖形工具來處理StrongLoop PM 。Arc是開源的,由StrongLoop提供專業(yè)支持。
有關(guān)更多信息,請(qǐng)參閱http://strong-pm.io/。
完整的文檔:
Operating Node apps (StrongLoop documentation)
Using StrongLoop Process Manager.
$ [sudo] npm install -g strongloop
$ cd my-app $ slc start
查看Process Manager和所有已部署的應(yīng)用程序的狀態(tài):
$ slc ctl Service ID: 1Service Name: my-app Environment variables: No environment variables defined Instances: Version Agent version Cluster size 4.1.13 1.5.14 4Processes: ID PID WID Listening Ports Tracking objects? CPU profiling? 1.1.57692 57692 0 1.1.57693 57693 1 0.0.0.0:3001 1.1.57694 57694 2 0.0.0.0:3001 1.1.57695 57695 3 0.0.0.0:3001 1.1.57696 57696 4 0.0.0.0:3001
列出所有正在管理的應(yīng)用程序(服務(wù)):
$ slc ctl ls Id Name Scale 1 my-app 1
停止應(yīng)用程序:
$ slc ctl stop my-app
重新啟動(dòng)應(yīng)用程序:
$ slc ctl restart my-app
您也可以“軟重啟”,這為工作進(jìn)程提供了一個(gè)寬限期來關(guān)閉現(xiàn)有連接,然后重新啟動(dòng)當(dāng)前應(yīng)用程序:
$ slc ctl soft-restart my-app
從管理中刪除應(yīng)用程序:
$ slc ctl remove my-app
PM2是Node.js應(yīng)用程序的生產(chǎn)過程管理器,具有內(nèi)置的負(fù)載平衡器。PM2允許您永久保持應(yīng)用程序的活動(dòng)狀態(tài)并在無需停機(jī)的情況下重新加載它們,并且可以促進(jìn)常見的系統(tǒng)管理任務(wù) PM2還使您能夠管理應(yīng)用程序日志記錄,監(jiān)視和群集。
有關(guān)更多信息,請(qǐng)參閱https://github.com/Unitech/pm2。
$ [sudo] npm install pm2 -g
當(dāng)您使用該pm2
命令啟動(dòng)應(yīng)用程序時(shí),您必須指定應(yīng)用程序的路徑。但是,當(dāng)您停止,重新啟動(dòng)或刪除應(yīng)用程序時(shí),您只能指定應(yīng)用程序的名稱或ID。
$ pm2 start app.js[PM2] restartProcessId process id 0 ┌──────────┬────┬──────┬───────┬────────┬─────────┬────────┬──────┬ │ App name │ id │ mode │ pid │ status │ restart │ uptime │ memory │ watching │ ├──────────┼────┼──────┼───────┼────────┼─────────┼────────┼──────┤ │ my-app │ 0 │ fork │ 64029 │ online │ 1 │ 0s │ 17.816 MB │ disabled │ └──────────┴────┴──────┴───────┴────────┴─────────┴────────┴──────┘ Use the `pm2 show <id|name>` command to get more details about an app.
當(dāng)您使用該pm2
命令啟動(dòng)應(yīng)用程序時(shí),應(yīng)用程序會(huì)立即發(fā)送到后臺(tái)。您可以使用各種pm2
命令從命令行控制后臺(tái)應(yīng)用程序。
通過使用該pm2
命令啟動(dòng)應(yīng)用程序后,它將通過ID在PM2的進(jìn)程列表中注冊(cè)。因此,您可以使用其ID來管理系統(tǒng)上不同目錄中具有相同名稱的應(yīng)用程序。
請(qǐng)注意,如果多個(gè)具有相同名稱的應(yīng)用程序正在運(yùn)行,pm2
命令將影響所有這些應(yīng)用程序。因此,使用ID而不是名稱來管理各個(gè)應(yīng)用程序。
列出所有運(yùn)行的進(jìn)程:
$ pm2 list
停止應(yīng)用程序:
$ pm2 stop 0
重新啟動(dòng)應(yīng)用程序:
$ pm2 restart 0
要查看有關(guān)應(yīng)用程序的詳細(xì)信息
$ pm2 show 0
從PM2的注冊(cè)表中刪除應(yīng)用程序:
$ pm2 delete 0
Forever是一個(gè)簡(jiǎn)單的命令行界面工具,用于確保給定腳本連續(xù)運(yùn)行(永久)。Forever的簡(jiǎn)單界面非常適合運(yùn)行較小的Node.js應(yīng)用程序和腳本部署。
有關(guān)更多信息,請(qǐng)參閱https://github.com/foreverjs/forever。
$ [sudo] npm install forever -g
要啟動(dòng)腳本,請(qǐng)使用該forever start
命令并指定腳本的路徑:
$ forever start script.js
該命令將以守護(hù)進(jìn)程模式(在后臺(tái))運(yùn)行該腳本。
要運(yùn)行該腳本以便將其附加到終端,請(qǐng)忽略start
:
$ forever script.js
它是從永遠(yuǎn)的工具,通過使用日志選項(xiàng)腳本日志輸出是個(gè)好主意-l
,-o
和-e
,如下面的例子:
$ forever start -l forever.log -o out.log -e err.log script.js
要查看Forever啟動(dòng)的腳本列表,請(qǐng)執(zhí)行以下操作:
$ forever list
要停止由Forever啟動(dòng)的腳本,請(qǐng)使用該forever stop
命令并指定進(jìn)程索引(如forever list
命令所列)。
$ forever stop 1
或者,指定文件的路徑:
$ forever stop script.js
要停止Forever啟動(dòng)的所有腳本:
$ forever stopall
Forever有更多的選擇,它還提供了一個(gè)程序化的API。
SystemD是現(xiàn)代Linux發(fā)行版的默認(rèn)進(jìn)程管理器?;赟ystemD運(yùn)行Node服務(wù)非常簡(jiǎn)單。注意:本節(jié)基于Ralph Slooten(@axllent)的博客文章。
在/etc/systemd/system/express.service
以下位置創(chuàng)建文件:
[Unit]Description=Express # Set dependencies to other services (optional)#After=mongodb.service[Service] # Run Grunt before starting the server (optional)#ExecStartPre=/usr/bin/grunt # Start the js-file starting the express server ExecStart=/usr/bin/node server.js WorkingDirectory=/usr/local/express Restart=always RestartSec=10StandardOutput=syslog StandardError=syslog SyslogIdentifier=Express # Change to a non-root user (optional, but recommended)#User=<alternate user>#Group=<alternate group># Set environment options Environment=NODE_ENV=production PORT=8080[Install]WantedBy=multi-user.target
$ systemctl enable express.service
$ systemctl start express.service
$ systemctl status express.service