我正在尝试在启动时运行pm2,但未成功。

我正在Ubuntu 16.04中安装。

我的npm目录位于:〜/ .npm-global。

在那里,我可以看到pm2 -> ../lib/node_modules/pm2/bin/pm2

没有转储文件。

我的pm2目录是〜/ .pm2:

在那里,我可以看到dump.pm2和rpc.sock

如果我做:

sudo $(which pm2) start app.js
sudo $(which pm2) startup ubuntu -u $USER
sudo $(which pm2) save


它告诉我:

Generating system init script in /etc/init.d/pm2-init.sh
[PM2] Making script booting at startup...
[PM2] -ubuntu- Using the command:
      su -c "chmod +x /etc/init.d/pm2-init.sh && update-rc.d pm2-init.sh defaults"


[PM2] Done.
[PM2] Saving current process list...
[PM2] Successfully saved in /home/theUser/.pm2/dump.pm2


我可以看到该应用运行良好。

如果我这样做了,sudo ~/.npm-global/bin/pm2 start /etc/init.d/pm2-init.sh,它会给我:

events.js:160
      throw er; // Unhandled 'error' event
            ^
Error: connect EACCES ~/.pm2/rpc.sock
    at ....


/etc/init.d/pm2-init.sh具有:

NAME=pm2
PM2=/home/theUser/.pm2
USER=theUser
DEFAULT=/etc/default/$NAME

export PATH=/usr/bin:$PATH
export PM2_HOME="/home/theUser/.npm-global/lib/node_modules/pm2/bin/"


我也尝试使用:export PM2_HOME="/home/theUser/.pm2

当我从/etc/init.d/pm2-init.sh启动scipt时,它说它无法转储(可能是因为转储仅存在于〜/ .pm2目录中)

如果我尝试:

    sudo $(which pm2) start app.js
    sudo $(which pm2) startup systemd -u $USER
    sudo $(which pm2) save


并手动执行(因为它无法以普通用户身份找到pm2):

sudo〜/ .npm-global / pm2 dump &&〜/ .npm-global / pm2 kill && systemctl守护进程重新加载&& systemctl enable〜/ .npm-global / pm2 && systemctl start〜/ .npm-global / pm2

所以,

1)我不确定是否必须运行sudo $(which pm2) startup systemd -u $USERsudo $(which pm2) startup ubuntu -u $USER

2)我应该拥有什么PM2和PM2_HOME?

3)如何在sudo路径中添加~/.npm-global/bin,或者当我将pm2作为sudo运行时,通常如何使用该路径。注意,我不想更改/ etc / sudoers。

最佳答案

我无法回答您所有的问题,但是我遇到了同样的问题,这对我有用:
http://www.anicehumble.com/2016/05/pm2-must-not-be-ran-with-sudo.html

关于node.js - pm2无法在ubuntu中启动,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38294100/

10-16 20:05