pm2 - 非root用户启动脚本权限被拒绝

4
我刚刚在Debian 9上安装了pm2,并需要运行几个用户的NodeJS服务器。每个用户都有自己的NodeJS服务器,我需要在他们的帐户下运行它们,而不是在root账户下。
例如,我有一个名为“user1”的用户:
  • 我可以正常地控制pm2;
  • 在user1上执行此命令以启用启动脚本: pm2 startup;
  • 然后我将输出的命令复制到root并执行…
  • 现在已经为给定的用户创建了启动脚本。
虽然pm2仍在user1上工作,但是在重新启动后,我无法控制pm2,并且出现以下错误: [PM2][ERROR] Permission denied, to give access to current user: $ sudo chown user1:user1 /home/user1/.pm2/rpc.sock /home/user1/.pm2/pub.sock 如果我在root上执行此命令,则可以再次在user1上控制pm2,但是所有NodeJS服务器都将以root身份执行!
我需要在每次重新启动时“授予权限”...
如何解决这个问题?
4个回答

10

我不确定以下方法是否存在任何风险,但它确实解决了我遇到的同样问题。

1- open new terminal (fresh, without sudo permission)
2- sudo chmod -R 777 /home/user1/.pm2 (gives permission to the .pm2 folder)
3- pm2 start index.js (Note that there is no sudo here)
4- pm2 save
5- pm2 startup
6- Restart your computer and check pm2 monit
7- It should list your index process now. If not, try from 1-5, 8, and then 6.
8- paste the command listed in step 5

@Max,我已经标记了你的评论。 - ino

2

你可能是以 root 用户身份启动了 pm2 任务。所以请通过以下方式检查正在使用的系统进程:

sudo systemctl -a

如果您发现有一个名为pm2-root的单元,请将其删除。运行命令sudo systemctl stop pm2-root 和 sudo systemctl disable pm2-root。然后使用您的用户名启动进程。
请确保您正在使用pm2-sammy,并以sammy作为您的用户名。

2

我发现原因是因为我的用户名中带有点号(domain.com),而systemd不能将其识别为有效的用户名……因为该服务是在root用户下启动的。

快速修复方法是找到systemd中自动生成的服务,然后用 id -u <user> 命令找到相应用户的用户ID并替换用户名。


0

尝试使用sudo pm2 <command>


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接