使用PM2来运行Node.js应用
因為聽說pm2的功能比forever更強大,所以我決定試試用pm2,雖然我以前有用過forever。
安装PM2
全球安装
npm i -g pm2
如果您的系统可以识别pm2命令,则安装完成。
使用PM2启动应用程序。
如果只是简单地启动js程序,可以使用pm2 start。
pm2 start jsファイル
可以指定一个js文件,但使用–name选项以命名启动脚本更方便。
我觉得没有名字操作太不方便,所以名字是必需的。
如果文件名为 main.js,在使用 pm2 list 命令显示应用程序列表时,会显示 main.js,然后就会想“这是哪个应用程序来着?”。
這次作為一個範例,我們會用 “slack-bot” 這個應用程式名稱來啟動 pm2。
$ pm2 start main.js --name slack-bot
[PM2] Starting /home/pi/dev/slack-bot/main.js in fork_mode (1 instance)
[PM2] Done.
┌───────────┬────┬──────┬──────┬────────┬─────────┬────────┬─────┬───────────┬──────┬──────────┐
│ App name │ id │ mode │ pid │ status │ restart │ uptime │ cpu │ mem │ user │ watching │
├───────────┼────┼──────┼──────┼────────┼─────────┼────────┼─────┼───────────┼──────┼──────────┤
│ slack-bot │ 0 │ fork │ 1432 │ online │ 0 │ 0s │ 12% │ 20.0 MB │ pi │ disabled │
└───────────┴────┴──────┴──────┴────────┴─────────┴────────┴─────┴───────────┴──────┴──────────┘
由于状态已经在线,所以已经启动。
重新启动
下午2点重启应用名称
$ pm2 restart slack-bot
Use --update-env to update environment variables
[PM2] Applying action restartProcessId on app [slack-bot](ids: 0)
[PM2] [slack-bot](0) ✓
┌───────────┬────┬──────┬──────┬────────┬─────────┬────────┬─────┬───────────┬──────┬──────────┐
│ App name │ id │ mode │ pid │ status │ restart │ uptime │ cpu │ mem │ user │ watching │
├───────────┼────┼──────┼──────┼────────┼─────────┼────────┼─────┼───────────┼──────┼──────────┤
│ slack-bot │ 0 │ fork │ 1480 │ online │ 1 │ 0s │ 66% │ 15.1 MB │ pi │ disabled │
└───────────┴────┴──────┴──────┴────────┴─────────┴────────┴─────┴───────────┴──────┴──────────┘
Use `pm2 show <id|name>` to get more details about an app
因为PID改变了,所以似乎重新启动了。
終止
请停止应用程序:pm2 stop アプリ名
$ pm2 stop slack-bot
[PM2] Applying action stopProcessId on app [slack-bot](ids: 0)
[PM2] [slack-bot](0) ✓
┌───────────┬────┬──────┬─────┬─────────┬─────────┬────────┬─────┬────────┬──────┬──────────┐
│ App name │ id │ mode │ pid │ status │ restart │ uptime │ cpu │ mem │ user │ watching │
├───────────┼────┼──────┼─────┼─────────┼─────────┼────────┼─────┼────────┼──────┼──────────┤
│ slack-bot │ 0 │ fork │ 0 │ stopped │ 1 │ 0 │ 0% │ 0 B │ pi │ disabled │
└───────────┴────┴──────┴─────┴─────────┴─────────┴────────┴─────┴────────┴──────┴──────────┘
Use `pm2 show <id|name>` to get more details about an app
由于状态显示为停止,看起来已经停止了。
查看日志
下午2点之后,打开应用程序日志。
$ pm2 logs slack-bot
[TAILING] Tailing last 15 lines for [slack-bot] process (change the value with --lines option)
/home/pi/.pm2/logs/slack-bot-error-0.log last 15 lines:
...
默认设置只能显示15行,如果增加显示行数会更容易阅读。
pm2 logs slack-bot --lines 50
清除日志
pm2 清空缓存
查看应用程序状态
展示 pm2 中的应用名称
可以查看应用程序的状态/路径/版本。
┌───────────────────┬─────────────────────────────────────────────────────────────┐
│ status │ online │
│ name │ slack-bot │
│ restarts │ 2 │
│ uptime │ 3h │
│ script path │ /home/pi/dev/slack-bot/receptionist.js │
│ script args │ token=xoxb-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx │
│ error log path │ /home/pi/.pm2/logs/slack-bot-error-0.log │
│ out log path │ /home/pi/.pm2/logs/slack-bot-out-0.log │
│ pid path │ /home/pi/.pm2/pids/slack-bot-0.pid │
│ interpreter │ node │
│ interpreter args │ N/A │
│ script id │ 0 │
│ exec cwd │ /home/pi/dev/slack-bot │
│ exec mode │ fork_mode │
│ node.js version │ 10.4.1 │
│ watch & reload │ ✔ │
│ unstable restarts │ 0 │
│ created at │ 2018-11-19T02:17:46.158Z │
└───────────────────┴─────────────────────────────────────────────────────────────┘
Code metrics value
┌─────────────────┬────────┐
│ Loop delay │ 1.49ms │
│ Active requests │ 0 │
│ Active handles │ 5 │
└─────────────────┴────────┘
监控应用程序
可以查看正在运行的应用的CPU使用率、内存使用量、循环延迟和请求/分钟。
pm2 monit
易于阅读,稍微有点酷
有一项名为PM2 Plus的服务,似乎可以通过Web查看类似仪表盘的信息。(详细情况尚未确认)
https://pm2.io/doc/en/plus/quick-start/
使用设置文件进行启动指定
可以使用Yaml和Json将启动选项配置在设定文件中定义。
这次我们尝试使用Yaml创建。
# ファイル名:pm2config.yml(ファイル名は自由です)
name: slack-bot # アプリ名
script: main.js # スクリプトファイルパス
watch: true # フォルダやサブフォルダ内のファイルが変更された場合、アプリは再読み込みされます
log-date-format: "YYYY-MM-DD HH:mm Z" # ログに日付を追加
在设定文件中可用的项目请参考以下链接:https://pm2.io/doc/en/runtime/reference/ecosystem-file/#apps-options。
使用配置文件启动
pm2 start pm2.yml
pm2 stop pm2.yml
pm2 restart pm2.yml
参考链接
-
- [Node.js] PM2を用いて本番環境でNodeJSアプリを動かす – YoheiM .NET
- PM2 – Process File