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

sh 在Raspberry Pi上安装tmux 2.0(Debian 7.8)Raspbian Wheezy

sh 在Raspberry Pi上安装tmux 2.0(Debian 7.8)Raspbian Wheezy