【问题标题】:PM2 - Autostart on Raspbian (Raspberry Pi) does not workPM2 - Raspbian(Raspberry Pi)上的自动启动不起作用
【发布时间】: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。
  • 到目前为止您找到解决方案了吗?

标签: node.js raspberry-pi raspbian autostart pm2


【解决方案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】:

我也搜索了几天没有成功,但是, 我让它工作起来很简单。


  1. 在 Raspian 中单击菜单、首选项、主菜单编辑器
  2. 单击首选项并检查 LXSession 的默认应用程序
  3. 点击确定并关闭主菜单编辑器
  4. 现在单击菜单并在首选项下单击 LXSession 的默认应用程序
  5. LXSession 配置打开
  6. 点击自动启动
  7. 在手动自动启动的应用程序下粘贴到您的 java 命令行中
  8. 点击添加
  9. 关闭 LXSession 配置应用程序并重新启动您的 pi

你的 java 应用应该在重启后运行

【讨论】:

  • Java?我错过了什么吗?
【解决方案4】:

这是基于this article 的解决方法(建议的解决方法对我没有帮助):

  1. 制作一个迷你启动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
    
  2. 使其可执行

    chmod 755 /etc/init.d/blah
    
  3. 更新系统符号链接

    update-rc.d pm2 defaults
    
  4. 重新启动,访问您的网站(查看日期;确保它没有被浏览器缓存)

【讨论】:

    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-11-23
      • 2017-04-11
      • 2017-03-28
      • 1970-01-01
      • 2022-11-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多