【问题标题】:How do you use pm2 startup with a non-root user?非 root 用户如何使用 pm2 启动?
【发布时间】:2016-06-02 09:09:09
【问题描述】:

根据此处的文档: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"

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

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

export PATH=/usr/bin:$PATH
export PM2_HOME="/home/nodeapps/.pm2"

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

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

在我的启动日志中,我发现以下行:

Starting pm2
/usr/bin/env: node: No such file or directory

我知道 Ubuntu 上的“node”实际上是“nodejs”。会不会是这个原因?

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

或者,这可能是 $PATH 问题吗?如果是的话,怎么给root加上正确的路径(至少我觉得应该加到root下)

【问题讨论】:

  • 在 root 上创建符号链接解决了这个问题。 ln -s /usr/bin/nodejs /usr/sbin/node

标签: node.js ubuntu pm2


【解决方案1】:

不知道对你有没有帮助但是我是这样用的:


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

PS:根据需要更改。

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

【讨论】:

  • 嗯...tipe ?你是说type 吗?!非常好的提示。谢谢!
  • 嗨哈桑。我刚刚纠正了它。正确的是“类型”。感谢您的评论,对错误深表歉意。
  • @RodrigoGaldino。谢谢你。这个答案有效!
【解决方案2】:

(代表 OP 发布)

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

ln -s /usr/bin/nodejs /usr/sbin/node

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-08
    • 2018-11-15
    • 1970-01-01
    • 1970-01-01
    • 2015-04-29
    • 2015-09-25
    • 1970-01-01
    • 2018-04-09
    相关资源
    最近更新 更多