Node.js PM2-Raspbian(Raspberry Pi)上的自动启动不工作

Node.js PM2-Raspbian(Raspberry Pi)上的自动启动不工作,node.js,raspberry-pi,raspbian,autostart,pm2,Node.js,Raspberry Pi,Raspbian,Autostart,Pm2,好的,伙计们 这让我快发疯了。。。无法使我的nodejs应用程序autostart@boot在树莓皮上 机器:覆盆子2(覆盆子杰西) 尝试了我在谷歌上找到的几乎所有可能的解决方案 这就是我的结局: 已安装pm2 $ sudo npm install -g pm2 这将以init.d脚本的形式安装它,并以pi用户的身份运行应用程序 $ sudo pm2 startup raspberry -u pi [PM2] Generating system init script in /etc/init

好的,伙计们

这让我快发疯了。。。无法使我的nodejs应用程序autostart@boot在树莓皮上

机器:覆盆子2(覆盆子杰西)

尝试了我在谷歌上找到的几乎所有可能的解决方案

这就是我的结局:

已安装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
将导出PM2\u HOME=“/root/.PM2”更改为导出PM2\u HOME=“/HOME/pi/.PM2”

使用pm2启动我的节点项目

$ pm2 start server.js -x --name "node-project"
保存活动进程,以便在重新启动时重新启动它们(如果pi崩溃,它将在关机时自动保存)

因此,现在服务器已启动并运行良好。。。直到我重新启动!我原以为pm2会自动启动我的节点应用程序,但由于某些原因,它没有…:(

知道问题出在哪里吗

顺便说一句:我也尝试过像这样调用startup
sudo env PATH=$PATH:/usr/local/bin pm2 startup-raspberry-u pi
,但也没用

问候,


萨沙

Mia的评论让我再次检查了PM2的问题清单,有人想出了解决办法!:)

解决方案:

sudo pm2 startup systemd -u <username>
sudo pm2启动系统D-u
工作起来很有魅力!:)


Sascha

我也搜索了好几天,但都没有成功, 我很简单就让它工作了


  • 在Raspian中,单击菜单、首选项、主菜单编辑器
  • 单击首选项并检查LXSession的默认应用程序
  • 单击确定并关闭主菜单编辑器
  • 现在单击菜单,然后在“首选项”下单击LXSession的默认应用程序
  • LXSession配置打开
  • 单击“自动启动”
  • 在手动自动启动应用程序下,粘贴到java命令行中
  • 单击添加
  • 关闭LXSession配置应用程序并重新启动pi

  • 您的java应用程序应该在重新启动后运行

    我可以使用以下命令在我的RPi上正确启动PM2:

    sudo env PATH=$PATH:/usr/local/bin pm2启动系统d-u pi--hp/home/pi


    --hp/home/pi
    部分似乎就是区别所在。这就是我发现的许多不起作用的解决方案中遗漏的内容。

    这里有一个基于的解决方案(建议的解决方案对我没有帮助):

  • 制作一个小型启动init.d脚本,自己重新启动pm2进程

    #/垃圾箱/垃圾箱
    #/etc/init.d/pm2
    #
    #帮助文档:
    #https://debian-administration.org/article/28/Making_scripts_run_at_boot_time_with_Debian
    pm2复活
    
  • 使其可执行

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

    更新rc.d pm2默认值
    
  • 重新启动,转到您的网站(查看日期;确保它未被浏览器缓存)


  • 我将描述引导我找到解决方案的调试步骤,因为我认为它是有用的。如果你只是想得到答案,我邀请你到这个答案的末尾

    调试步骤

    在我的例子中,我是这样设置pm2启动的:

    sudo pm2 startup systemd -u pi
    
    而且它不起作用。pm2只是在开机时拒绝启动。为了知道发生了什么事,我跟着

    接下来,我看了一下systemctl单元:

     systemctl list-units
    
    在输出中看到了这条红线

    pm2-pi.service    failed failed    PM2 process manager
    
    然后我查看了相应的日志(注意文件名末尾的用户名: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
    

    你是用sudo安装pm2的吗?sudo npm install-g pm2I也有类似的问题——我很想知道你是否设法解决了你的问题。当然,我是用sudo安装的。没有sudo,我无法安装global-deps。到目前为止,你找到解决方案了吗?是我:)我很高兴它有帮助。Java?我错过了什么吗?在尝试了所有其他答案后,这个答案完美无瑕。重启后,pm2现在启动cncjs(在我的例子中)。
    journalctl -u pm2-pi
    
    May 28 12:36:52 raspberrypi pm2[534]: Error: EACCES: permission denied, open '/root/.pm2/module_conf.json'
    
    sudo pm2 startup -u root