我正在使用pm2来启动一个node.js进程,并且我希望在启动系统(Intel Atom处理器上的Ubuntu 14.04)时自动启动这个进程。 我遵循pm2网站上的说明,但没有成功。 我的dump.pm2似乎是正确的,但pm2守护进程从未启动。 我已经尝试了ubuntu
和linux
选项到pm2 startup
,以及autodetect,无论是否有指定的用户。 文件(链接) S20pm2-init.sh
已经在/etc/rc[2-5].d
创build,但是没有任何东西可以开始。 我无法在系统日志中find任何明显的错误消息。
有任何想法吗?
编辑添加
我发现service pm2-init.sh start
从我的login帐户(与文件/etc/init.d/pm2-init.sh
中的USER=
所定义的帐户相同)运行时正确启动守护进程。 我已经确定这个文件中的PM2_HOME
定义也指向了正确的位置。 但是,它仍然不启动系统启动!
pm2启动工作,有一个关键的命令埋在文档和这里。
您必须1)启动您的所有进程,2)创建启动脚本,3)运行
pm2 save
参考@ lazlojuly的答案在这里 。
好吧,无论如何,我认为这个工作。 我最初试图启动一个系统用户(没有登录shell),称为运行相同名称的节点应用程序的node-red
,当没有工作,我试图启动为普通用户max
。 经过一些摆弄之后,它突然开始工作, 但是在这个缓慢的Atom处理器上,节点应用程序在台式机出现之后仅仅几分钟就开始。
为了让它在系统用户下运行:首先,以max
身份登录,我删除了所有pm2作业并运行pm2 save
以创建一个空的转储文件。 然后我做了:
sudo npm install pm2@latest -g pm2 update
为了获得最新版本,以防万一。 我从0.14.7移到了0.15.7
然后我跑了
sudo su -c "env PATH=$PATH:/usr/bin pm2 startup ubuntu -u node-red"
并编辑/etc/init.d/pm2-init.sh
,将设置PM2_HOME
目录的行更正为node-red
的主目录:
export PM2_HOME="/home/node-red/.pm2"
然后,我成为了node-red
用户的登录版本,更改为该用户的主目录,启动了我的工作,并保存了进程列表:
sudo -H -u node-red bash -l cd pm2 start /usr/local/bin/node-red --node-args="--max-old-space-size=128" -- -v -u /home/node-red/.node-red pm2 save
然后,我从node-red
的shell中退出,重新启动,(经过一分钟左右的延迟),应用程序运行良好!
请注意,这是Ubuntu 14.04,它使用init
/ upstart
系统。 后来的版本我认为使用systemd
方法,可能需要在创建启动脚本时将ubuntu
参数更改为systemd
。
不过,我仍然不确定为什么它第一次不能正常工作。
我一直在寻找解决办法,直到我来到这个解决方案
执行pm2保存后
现在这对我来说工作得很好