非root用户如何使用pm2启动?

Zac*_*ith 7 ubuntu node.js pm2

根据这里的文档:http : //pm2.keymetrics.io/docs/usage/startup/#startup-systems-support

您可以使用该命令pm2 startup ubuntu -u nodeapps在服务器启动时复活所有保存的 pm2 作业。

我以 nodeapps 用户身份运行此命令。然后我得到了一个 sudo su 命令来运行。我注销了 nodeapps,使用 sudo su 以 root 身份登录系统,然后运行命令:

sudo su -c "env PATH=$PATH:/usr/bin pm2 startup ubuntu -u nodapps --hp /home/nodeapps"
Run Code Online (Sandbox Code Playgroud)

服务器重新启动时进程未重新启动。我在 Stack Overflow 上发现了这个问题:Ubuntu 14.04 - pm2 startup not started after reboot

在脚本中,/etc/init.d/pm2-init.sh我找到了问题建议解决的行:

export PATH=/usr/bin:$PATH
export PM2_HOME="/home/nodeapps/.pm2"
Run Code Online (Sandbox Code Playgroud)

但对我来说它看起来是正确的,所以我没有改变任何东西。

然后我发现了这个问题:pm2 Startup not started on Ubuntu

在我的启动日志中,我找到了以下行:

Starting pm2
/usr/bin/env: node: No such file or directory
Run Code Online (Sandbox Code Playgroud)

我知道 Ubuntu 上的“节点”实际上是“nodejs”。这可能是原因吗?

如果是,我该怎么做才能使启动命令查找 nodejs 而不是 node.js ?

或者,这可能是 $PATH 问题吗?如果是,我如何将正确的路径添加到root(至少我认为它应该添加到root)

Rod*_*rgo 13

我不知道它是否对你有帮助,但我是这样使用的:


  1. 作为非 root 用户
pm2 startup -u <YOUR_NON_ROOT_USER>
Run Code Online (Sandbox Code Playgroud)
  1. 复制行显示如下
env PATH=$PATH:/usr/bin pm2 startup systemd -u delivery --hp /home/delivery
Run Code Online (Sandbox Code Playgroud)
  1. 作为 root 执行
env PATH=$PATH:/usr/bin pm2 startup systemd -u delivery --hp /home/delivery
Run Code Online (Sandbox Code Playgroud)
  1. 返回非 root 用户并输入:
pm2 start <YOUR /PATH/TO/INDEX.JS> --name <YOU_APPLICATION_NAME>
Run Code Online (Sandbox Code Playgroud)
  1. 作为非根类型:
pm2 save
Run Code Online (Sandbox Code Playgroud)
  1. 重启
sudo reboot
Run Code Online (Sandbox Code Playgroud)
  1. 作为非 root 用户,输入下面的命令来检查它是否有效
pm2 status
Run Code Online (Sandbox Code Playgroud)

PS:根据需要更改。

我希望它对您或某人有用。


hal*_*fer 2

(代表OP发布)

事实上这就是问题所在。通过创建符号链接(作为 root)修复:

ln -s /usr/bin/nodejs /usr/sbin/node
Run Code Online (Sandbox Code Playgroud)