我使用pm2来启动node.js进程,我希望这个进程在系统(Ubuntu 14.04 on Intel Atom处理器)启动时自动启动。我已经按照pm2网站上的说明进行了操作,但没有成功。我的转储。Pm2似乎是正确的,但是Pm2守护进程从未启动。我已经尝试了ubuntu
和linux
选项到pm2 startup
,以及自动检测,无论是否有指定用户。文件(链接)S20pm2-init.sh
已在/etc/rc[2-5].d
中创建,但没有开始。我在系统日志中找不到任何明显的错误信息。
任何想法?
编辑添加
我发现当从我的登录帐户运行时,service pm2-init.sh start
正确地启动守护进程,这与文件/etc/init.d/pm2-init.sh
中USER=
所定义的相同。我已经确保这个文件中的PM2_HOME
定义也指向正确的位置。然而,它仍然没有在系统启动时启动!
要使pm2启动工作,文档中有一个关键命令。
你必须1)启动所有进程,2)创建启动脚本,3)运行
pm2 save
Ubuntu 18.04.4
有哪些步骤适合我
-
npm i pm2 -g
- 以root用户
pm2 startup
运行此命令- 创建
/etc/systemd/system
中的服务
pm2-root
- 创建
-
systemctl enable pm2-root
,service pm2-root status
- 注:节点升级后,以root身份执行以下命令:
pm2 unstartup
,pm2 startup
;文档
- 注:节点升级后,以root身份执行以下命令:
-
pm2 start distindex.js --name YourNodeApp
-
pm2 save
-
reboot
-
pm2 ls
应该显示你的YourNodeApp
在线
好吧,我认为这是有效的,无论如何。我最初试图以一个名为node-red
的系统用户(没有登录shell)启动,运行同名的节点应用程序,当这不起作用时,我尝试以普通用户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
。
我仍然不确定为什么它第一次不能正常工作。
基本上,
步骤1:执行以下命令,
pm2 startup
在这里你将得到一个命令生成,copy/paste
它和完成。
(您将从上面的步骤获得的示例命令:sudo env PATH=$PATH:/usr/bin /usr/lib/node_modules/pm2/bin/pm2 startup systemd -u ubuntu --hp /home/ubuntu
)Ref
我一直在寻找工作,直到我来到这个解决方案
在执行pm2后保存
- //init.d/pm2-init.sh
- 然后在cron选项卡上@reboot root/etc/init.d/pm2-init.sh start这相当于在cmd下执行,但在重启时触发
现在运行正常