我正在尝试使用PM2
进程管理器。我使用 ansible 安装它,Franklinkim.pm2 角色
它起作用了,它启动了我的节点应用程序,如果我手动终止节点应用程序,我会看到 PM2 重新启动它
但是...,我似乎可以访问现有的 PM2 实例。
如果ps aux | grep PM2
我得到类型
root 1073 4.1 8.3 648348 41736 ? Ssl 06:12 0:00 PM2 v0.12.15: God Daemon
现在我想查看 PM2 的进程列表,因此我输入sudo pm2 list
并得到
[PM2] Spawning PM2 daemon
[PM2] PM2 Successfully daemonized
┌──────────┬────┬──────┬─────┬────────┬─────────┬────────┬────────┬──────────┐
│ App name │ id │ mode │ pid │ status │ restart │ uptime │ memory │ watching │
└──────────┴────┴──────┴─────┴────────┴─────────┴────────┴────────┴──────────┘
Use `pm2 show <id|name>` to get more details about an app
失败!它没有向我显示正在运行的 PM2,而是生成了一个新的 PM2
我已经尝试过sudo -u root pm2 list
了pm2 list
,但是我得到的是相同的结果,或者如果第二个已经在运行,我只能看到第二个实例的列表,而不是运行我的应用程序的列表。
我觉得无论是什么原因,这都是我对 Linux 上用户和进程的一些根本性误解,我还不太明白。
答案1
pm2将使用$HOME
变量来确定.pm2
目录所在的位置。当然你可以用覆盖它 $PM2_HOME
多变的
当您使用 ansible 调用 pm2 时,看起来您使用的是 root 用户。因此,.pm2
目录位于/root/.pm2
。因此,解决方案是使用命令
sudo -i pm2 list
当你sudo
不带-i
参数调用时,所有环境变量(包括$HOME
)仍然会从 sudo 之前的原始帐户继承。