【发布时间】:2016-11-12 15:25:18
【问题描述】:
我试图在启动时运行 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 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 路径,或者通常如何在我以 sudo 运行 pm2 时使用此路径。注意,我不想更改 /etc/sudoers。
【问题讨论】: