?
Dokumen ini menggunakan Manual laman web PHP Cina Lepaskan
當您運行用于生產的Express應用程序時,使用流程管理器來實現(xiàn)以下任務會很有幫助:
如果崩潰,請自動重新啟動應用程序。
深入了解運行時性能和資源消耗。
動態(tài)修改設置以提高性能。
控制集群。
流程管理器有點像應用程序服務器:它是便于部署的應用程序的“容器”,提供高可用性,并使您能夠在運行時管理應用程序。
Express和其他Node.js應用程序最流行的進程管理器如下所示:
StrongLoop Process Manager
PM2
Forever
SystemD
但是,使用這四種工具中的任何一種都可能非常有用,但StrongLoop Process Manager是唯一提供全面的運行時和部署解決方案的工具,該解決方案可解決整個Node.js應用程序生命周期,其中包括生產前后每一步的工具,統(tǒng)一的界面。
這里簡要介紹一下這些工具。有關詳細比較,請參閱http://strong-pm.io/compare/。
StrongLoop過程管理器(StrongLoop PM)是Node.js應用程序的生產過程管理器。StrongLoop PM具有內置負載平衡,監(jiān)控和多主機部署以及圖形控制臺。您可以使用StrongLoop PM進行以下任務:
構建,打包并將Node.js應用程序部署到本地或遠程系統(tǒng)。
查看CPU配置文件和堆快照以優(yōu)化性能并診斷內存泄漏。
讓進程和集群永遠活著。
查看應用程序的性能指標。
使用Nginx集成輕松管理多主機部署。
將多個StrongLoop PM統(tǒng)一到從Arc管理的分布式微服務運行時。
您可以使用稱為的強大的命令行界面工具slc
或稱為Arc的圖形工具來處理StrongLoop PM 。Arc是開源的,由StrongLoop提供專業(yè)支持。
有關更多信息,請參閱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和所有已部署的應用程序的狀態(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
列出所有正在管理的應用程序(服務):
$ slc ctl ls Id Name Scale 1 my-app 1
停止應用程序:
$ slc ctl stop my-app
重新啟動應用程序:
$ slc ctl restart my-app
您也可以“軟重啟”,這為工作進程提供了一個寬限期來關閉現(xiàn)有連接,然后重新啟動當前應用程序:
$ slc ctl soft-restart my-app
從管理中刪除應用程序:
$ slc ctl remove my-app
PM2是Node.js應用程序的生產過程管理器,具有內置的負載平衡器。PM2允許您永久保持應用程序的活動狀態(tài)并在無需停機的情況下重新加載它們,并且可以促進常見的系統(tǒng)管理任務 PM2還使您能夠管理應用程序日志記錄,監(jiān)視和群集。
有關更多信息,請參閱https://github.com/Unitech/pm2。
$ [sudo] npm install pm2 -g
當您使用該pm2
命令啟動應用程序時,您必須指定應用程序的路徑。但是,當您停止,重新啟動或刪除應用程序時,您只能指定應用程序的名稱或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.
當您使用該pm2
命令啟動應用程序時,應用程序會立即發(fā)送到后臺。您可以使用各種pm2
命令從命令行控制后臺應用程序。
通過使用該pm2
命令啟動應用程序后,它將通過ID在PM2的進程列表中注冊。因此,您可以使用其ID來管理系統(tǒng)上不同目錄中具有相同名稱的應用程序。
請注意,如果多個具有相同名稱的應用程序正在運行,pm2
命令將影響所有這些應用程序。因此,使用ID而不是名稱來管理各個應用程序。
列出所有運行的進程:
$ pm2 list
停止應用程序:
$ pm2 stop 0
重新啟動應用程序:
$ pm2 restart 0
要查看有關應用程序的詳細信息
$ pm2 show 0
從PM2的注冊表中刪除應用程序:
$ pm2 delete 0
Forever是一個簡單的命令行界面工具,用于確保給定腳本連續(xù)運行(永久)。Forever的簡單界面非常適合運行較小的Node.js應用程序和腳本部署。
有關更多信息,請參閱https://github.com/foreverjs/forever。
$ [sudo] npm install forever -g
要啟動腳本,請使用該forever start
命令并指定腳本的路徑:
$ forever start script.js
該命令將以守護進程模式(在后臺)運行該腳本。
要運行該腳本以便將其附加到終端,請忽略start
:
$ forever script.js
它是從永遠的工具,通過使用日志選項腳本日志輸出是個好主意-l
,-o
和-e
,如下面的例子:
$ forever start -l forever.log -o out.log -e err.log script.js
要查看Forever啟動的腳本列表,請執(zhí)行以下操作:
$ forever list
要停止由Forever啟動的腳本,請使用該forever stop
命令并指定進程索引(如forever list
命令所列)。
$ forever stop 1
或者,指定文件的路徑:
$ forever stop script.js
要停止Forever啟動的所有腳本:
$ forever stopall
Forever有更多的選擇,它還提供了一個程序化的API。
SystemD是現(xiàn)代Linux發(fā)行版的默認進程管理器。基于SystemD運行Node服務非常簡單。注意:本節(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