PM2 - Raspbian(Raspberry Pi)上的自动启动不起作用
Posted
技术标签:
【中文标题】PM2 - Raspbian(Raspberry Pi)上的自动启动不起作用【英文标题】:PM2 - Autostart on Raspbian (Raspberry Pi) does not work 【发布时间】:2015-12-23 05:23:06 【问题描述】:好吧,伙计们,
这让我发疯...无法让我的 nodejs 应用程序在树莓派上自动启动@boot...
机器:Raspberry 2(Raspbian Jessie)
尝试了我在 Google 上找到的几乎所有可能的解决方案。
这就是我最终得到的结果:
已安装 pm2
$ sudo npm install -g pm2
这会将其安装为 init.d 脚本并以 pi 用户身份运行应用程序
$ sudo pm2 startup raspberry -u pi
[PM2] Generating system init script in /etc/init.d/pm2-init.sh
[PM2] Making script booting at startup...
[PM2] -raspberry- Using the command:
su -c "chmod +x /etc/init.d/pm2-init.sh && update-rc.d pm2-init.sh defaults"
[PM2] Done.
我读到脚本引用了错误的 .pm2 文件夹(查看根文件夹,而不是用户文件夹),所以我改变了它
$ sudo vi /etc/init.d/pm2-init.sh
将export PM2_HOME="/root/.pm2"
更改为export PM2_HOME="/home/pi/.pm2"
$ cd /opt/mycoolnodeproject
使用 pm2 启动我的节点项目
$ pm2 start server.js -x --name "node-project"
保存活动进程,以便在重启时重启它们(如果 pi 崩溃,它会在关机时自动保存)
$ pm2 dump
所以现在服务器已经启动并运行并且工作正常......直到我重新启动!我认为 pm2 会自动启动我的节点应用程序,但由于某种原因它不会...... :(
知道可能是什么问题吗?
顺便说一句:我也尝试过像 sudo env PATH=$PATH:/usr/local/bin pm2 startup raspberry -u pi
这样调用启动,但这也不起作用。
问候,
萨沙
【问题讨论】:
你用 sudo 安装了 pm2 吗? sudo npm install -g pm2 我也有类似的问题——很想知道你是否设法解决了你的问题。 当然,我是用 sudo 安装的。没有 sudo,我无法安装全局 deps。 到目前为止您找到解决方案了吗? 【参考方案1】:Mia 的评论让我再次查看了 PM2 的问题列表,有人想出了如何做到这一点! :)
https://github.com/Unitech/pm2/issues/1654
解决办法:
sudo pm2 startup systemd -u <username>
像魅力一样工作! :)
萨沙
【讨论】:
是我 :) 我很高兴它有帮助。【参考方案2】:我能够使用以下命令在我的 RPi 上正确启动 PM2:
sudo env PATH=$PATH:/usr/local/bin pm2 startup systemd -u pi --hp /home/pi
--hp /home/pi
部分似乎有所不同。这是我发现的许多不起作用的解决方案中遗漏的内容。
【讨论】:
在尝试了所有其他答案之后,这个答案完美无缺。重启后,pm2 现在启动 cncjs(在我的例子中)。【参考方案3】:我也搜索了几天没有成功,但是, 我让它工作起来很简单。
-
在 Raspian 中单击菜单、首选项、主菜单编辑器
单击首选项并检查 LXSession 的默认应用程序
点击确定并关闭主菜单编辑器
现在单击菜单并在首选项下单击 LXSession 的默认应用程序
LXSession 配置打开
点击自动启动
在手动自动启动的应用程序下粘贴到您的 java 命令行中
点击添加
关闭 LXSession 配置应用程序并重新启动您的 pi
你的 java 应用应该在重启后运行
【讨论】:
Java?我错过了什么吗?【参考方案4】:这是基于this article 的解决方法(建议的解决方法对我没有帮助):
制作一个迷你启动init.d脚本,自己复活pm2进程
#! /bin/sh
# /etc/init.d/pm2
#
# help documentation:
#https://debian-administration.org/article/28/Making_scripts_run_at_boot_time_with_Debian
pm2 resurrect
使其可执行
chmod 755 /etc/init.d/blah
更新系统符号链接
update-rc.d pm2 defaults
重新启动,访问您的网站(查看日期;确保它没有被浏览器缓存)
【讨论】:
【参考方案5】:我将描述引导我找到解决方案的调试步骤,因为我认为它可能很有用。如果您只想要解决方案,我邀请您到此答案的末尾。
调试步骤
就我而言,我是这样设置 pm2 启动的:
sudo pm2 startup systemd -u pi
而且它不起作用。 pm2 只是拒绝在启动时启动。为了知道发生了什么,我关注了this instructions。
接下来我看了一下 systemctl 单位:
systemctl list-units
在输出中看到这条红线
pm2-pi.service failed failed PM2 process manager
然后我查看了相应的日志(注意文件名末尾的用户名:pm2-pi)
journalctl -u pm2-pi
所以原因是 pi 用户没有足够的权限来访问 JSON 模块 conf 文件。
May 28 12:36:52 raspberrypi pm2[534]: Error: EACCES: permission denied, open '/root/.pm2/module_conf.json'
解决方案
我本可以更改 json 权限,但我决定以 root 用户身份运行 PM2。如果这很危险,请告诉我。
sudo pm2 startup -u root
【讨论】:
以上是关于PM2 - Raspbian(Raspberry Pi)上的自动启动不起作用的主要内容,如果未能解决你的问题,请参考以下文章
Raspberry Pi - Raspbian - 运动 - USB 摄像头 - 黑色图像
sh 使用Raspbian在Raspberry Pi上安装mitmproxy的说明。
如何使用 QEMU 模拟 Raspberry Pi Raspbian?
sh 在Raspberry Pi上安装tmux 2.0(Debian 7.8)Raspbian Wheezy