如何使用 PM2 获取应用程序 ID?

How do I get just the app id with PM2?

假设我有一个名为 "fizzbuzz" 的应用程序。我以 pm2 start index.js --name="fizzbuzz" --watch 开头。出于自动化目的,我只想获取应用程序的 ID。我猜我可以 grep 它,但它似乎是 PM2 开箱即用的东西。我在文档中找不到它。例如,我想这样做:

$ pm2 id --name="fizzbuzz"
3

我是否必须在 bash 中使用 grep 和字符串操作来完成此操作?

由于您可能无法向 pm2 添加 shell 行,因此您无法使用提供当前进程 ID 的 $$ 变量。还有另一种方法,无需求助于 ps、grep 等

只要你的命令是pm2 start index.js --name="fizzbuzz" --watch,你就可以这样做:

pm2 start index.js --name="fizzbuzz" --watch &
fizz_pid=$!

&号在后台运行pm2。 fizz_pid=$! 将最后放入后台的程序的进程id写入fizz_pid变量。 (注意:在 pm2 命令结束后添加一个管道 | 可能会破坏它。)

我用 node 和 grep 解决了这个问题。当我启动应用程序时,我使用的是 package.json 中的应用程序名称。如果我在应用程序的根目录中,我可以从 package.json:

packageName=`node -e "console.log((require('./package.json')).name)"`

我使用 pm2 的 mini-list 功能,输出:

+--- alpha-beta-gamma 
pid : 4327
pm2 id : 2
status : online 

然后我可以grep它:

pm2 -m ls | grep "\-\- $packageName" -A 3 | grep "pm2 id" | grep -oP '\d+$'

哪个returns:

2 

PM2 将在即将发布的版本中将其添加为一项功能。

检查此 link

process.env.pm_id 就是答案。我测试了一下,没问题。