好的,
这让我疯了......不能让我的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
答案 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)
我也搜索了几天但没有成功但是, 我让它非常简单。
你的java应用程序应该在重启后运行
答案 3 :(得分:0)
以下是基于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
重新启动,转到您的网站(并查看日期;确保它不是缓存浏览器)
答案 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'