使用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

易于阅读,稍微有点酷

スクリーンショット 2018-04-27 18.41.53.png

有一项名为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
广告
将在 10 秒后关闭
bannerAds