我试图在启动时运行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时,它表示它无法转储(可能因为dump只存在于〜/ .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 daemon-reload&& systemctl enable~ / .npm-global / pm2&& systemctl start~ / .npm-global / pm2
所以,
1)我不确定是否必须运行sudo $(which pm2) startup systemd -u $USER
或sudo $(which pm2) startup ubuntu -u $USER
2)我应该拥有什么PM2和PM2_HOME?
3)如何将~/.npm-global/bin
添加到sudo路径,或者当我将pm2作为sudo.Note运行时,通常如何能够使用此路径,我不想改变/ etc / sudoers中。
答案 0 :(得分:1)
我无法回答您的所有问题,但我遇到了同样的问题,这对我有用: http://www.anicehumble.com/2016/05/pm2-must-not-be-ran-with-sudo.html