PM2 - Raspbian上的自动启动(Raspberry Pi)不起作用

时间:2015-09-25 11:27:11

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

好的,

这让我疯了......不能让我的nodejs应用程序在覆盆子pi上自动启动@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那样打电话给创业公司,但这也不起作用。

此致

的Sascha

5 个答案:

答案 0 :(得分:14)

Mia的评论让我再次查看了PM2的问题列表,有人想出了怎么做! :)

https://github.com/Unitech/pm2/issues/1654

解决方案:

sudo pm2 startup systemd -u <username>

像魅力一样! :)

的Sascha

答案 1 :(得分:4)

我能够使用此命令在我的RPi上正确启动PM2启动:

sudo env PATH=$PATH:/usr/local/bin pm2 startup systemd -u pi --hp /home/pi

--hp /home/pi部分似乎有所不同。这就是我发现的许多无法解决的问题。

答案 2 :(得分:1)

我也搜索了几天但没有成功但是, 我让它非常简单。

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

答案 3 :(得分:0)

以下是基于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. 重新启动,转到您的网站(并查看日期;确保它不是缓存浏览器)

答案 4 :(得分:0)

我将描述导致该解决方案的调试步骤,因为我认为它可能有用。如果您只需要解决方案,我邀请您转到此答案的结尾。

调试步骤

就我而言,我正在像这样设置pm2启动:

from typing import NamedTuple

class Term(NamedTuple):
    coeff: int
    power: int

lst = [Term(4,0),Term(0,4)]

result = [term.coeff for term in lst if term.power == 0]
print(result)

那没有用。 pm2只是拒绝在启动时启动。为了知道发生了什么,我跟随了this instructions

接下来,我看一下systemctl单位:

sudo pm2 startup systemd -u pi

并在输出中看到这条红线

 systemctl list-units

然后,我查看了相应的日志(注意文件名末尾的用户名:pm2- pi

pm2-pi.service    failed failed    PM2 process manager

所以原因是pi用户没有足够的权限访问JSON模块conf文件。

journalctl -u pm2-pi

解决方案

我本可以更改json权限,但是我决定以root用户身份运行PM2。如果这样做很危险,请告诉我。

May 28 12:36:52 raspberrypi pm2[534]: Error: EACCES: permission denied, open '/root/.pm2/module_conf.json'
相关问题