在树莓派启动时启动Node应用程序

8

编辑:根据Jim Rush的建议,我现在使用rc.local而不是直接使用init.d来在启动时运行forever start。

我正在思考这个问题。

我想要在树莓派启动和重启时启动一个节点应用程序。我使用forever实际调用应用程序,并使用init.d进行debian样式的启动指令。

我已经在/etc/init.d目录中创建了kuuyi文件,并赋予它755的权限,在编辑文件后,运行update-rc.d kuuyi defaults,希望触发Raspbian在重新启动/引导时启动它。

这是我的init.d文件:

#!/bin/sh
#/etc/init.d/kuuyi

### BEGIN INIT INFO
# Provides:             kuuyi
# Required-Start:
# Required-Stop:
# Default-Start:        2 3 4 5
# Default-Stop:         0 1 6
# Short-Description:    Kuuyi
### END INIT INFO

case "$1" in
start)
/usr/local/bin/forever --sourceDir=/home/pi/kuuyi_device  -p /root/.forever run.js
;;
stop)
/usr/local/bin/forever stop --sourceDir=/home/pi/kuuyi_device run.js
;;
*)

echo "Usage: /etc/init.d/kuuyi {start|stop}"
exit 1
;;
esac
exit 0

有什么想法,为什么这不起作用?我在Raspberry Pi B+上运行Raspbian。我运行了“/etc/init.d kuuyi start”,并且forever能够启动应用程序。但是开机后却没有发生这种情况。

非常感谢任何关于此的帮助,我对这个问题已经筋疲力尽了。


我没有使用树莓派。也许你可以在 case 语句之前添加这一行:echo "$(date '+%Y%m%d-%H:%M:%S') : args=$@" >> /home/pi/kuuyi-args.log。这将至少确认你的脚本是否被调用。 - tivn
1个回答

6

我从/etc/rc.local运行Node(实际上是nodemon)。只需在命令行中加上&符号即可。 我还将stderr和stdout重定向到日志文件以解决启动和崩溃问题。 确保任何已写入的目录的权限正确是我早期遇到的问题之一。

示例:

PATH=$PATH:/opt/node/bin
cd /var/node/RoadsterNode
/opt/node/bin/nodemon /var/node/RoadsterNode/app.js < /dev/null >/var/tmp/startup.log 2>/var/tmp/startup.err &

感谢Jim提供的这个小技巧。我已经修改了我的rc.local文件,加入了forever调用,如下所示:/usr/local/bin/forever -l /home/pi/kuuyi_device/out.log -a start /home/pi/kuuyi_device/run.js & ......但是仍然没有成功。很可能是因为我的脚本在启动时出现了问题。 - risingtiger
@risingtiger 尝试将stdout和stderr捕获到文件中,这样您就可以看到发生了什么。您会注意到在我添加的示例中,当我设置它时,我发现节点不在我的路径上。 - Jim Rush
那似乎解决了问题!我已经苦苦挣扎了一段时间。非常感谢你。 - risingtiger
您可以直接将以下内容添加到rc.local文件中:<your-node-dir>/node <your-app-dir>/app.js > <your-app-dir>/log-file.txt - Oguz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接