我正在运行Raspberry Pi,运行Raspbian运行Node.js应用程序并尝试在Pi启动时启动它。我找到了几个例子,但我似乎无法让它工作。我目前的代码是:
#! /bin/sh
# /etc/init.d/MyApp
### BEGIN INIT INFO
# Provides: MyApp.js
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Starts MyApp.js
# Description: Start / stop MyApp.js at boot / shutdown.
### END INIT INFO
# If you want a command to always run, put it here
# Carry out specific functions when asked to by the system
case "$1" in
start)
echo "Starting MyApp.js"
# run application you want to start
node /home/pi/app/MyApp/MyApp.js
;;
stop)
echo "Stopping MyApp.js"
# kill application you want to stop
killall MyApp.js
;;
*)
echo "Usage: /etc/init.d/MyApp {start|stop}"
exit 1
;;
esac
exit 0
我在etc / init.d文件夹中运行了这个,运行chmod +x /etc/init.d/MyApp
,我可以手动运行它,然后运行sudo update-rc.d MyApp defaults
,重启并且脚本永远不会运行。我看了一些不同的例子,做了调整,但仍然没有运气。
答案 0 :(得分:26)
我首先检查了RaspberryPi上安装了node.js的位置,解决了这个问题:
which node
这给了我:
/usr/local/bin/node
打开crontab配置:
sudo crontab -e
然后在我的crontab中:
@reboot sudo /usr/local/bin/node <complete path to your .js app> &
保存,重新启动,问题解决了!
答案 1 :(得分:8)
Mohit是对的,但为了澄清,您可以使用 readlink 来查找Node.js应用的完整路径,因为稍后需要将其添加为cron作业。
readlink -f <<name of file >>
例如readlink -f HAP-NodeJS/Core.js
会产生/home/pi/HAP-NodeJS/Core.js
您还可以使用which node
查找已安装node.js的完整路径
接下来,使用sudo crontab -e
创建一个新的cron作业,并在最后添加以下代码:
@reboot sudo /usr/local/bin/node <<.js application path>> &
例如,我的代码看起来像这样。
@reboot sudo /usr/local/bin/node /home/pi/HAP-NodeJS/Core.js &
重启(或启动)后,Node.js应该运行。希望这可以解决问题。
答案 2 :(得分:4)
如果您使用的是0.10.24之类的预建Pi版本,则可能会遇到路径问题。
您可以提供节点二进制文件的完整路径作为start
命令的一部分,或者确保在运行/etc/init.d/MyApp
之前设置节点二进制文件的PATH。我有同样的问题,并尝试了两个成功。此外,您拥有的stop
命令可能无法正常工作。
#! /bin/sh
# /etc/init.d/test
### BEGIN INIT INFO
# Provides: test
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Example initscript
# Description: This file should be used to construct scripts to be
# placed in /etc/init.d.
### END INIT INFO
# Carry out specific functions when asked to by the system
case "$1" in
start)
echo "Starting test.js"
# run application you want to start
#node /home/pi/test.js > /home/pi/test.log
/home/pi/downloads/node-v0.10.24-linux-arm-pi/bin/node /home/pi/test.js >> /home/pi/test.log
;;
stop)
echo "Stopping test.js"
# kill application you want to stop
killall -9 node
# Not a great approach for running
# multiple node instances
;;
*)
echo "Usage: /etc/init.d/test {start|stop}"
exit 1
;;
esac
exit 0
如果您想sudo node
,可以使用Defaults secure_path
将PATH添加到sudo visudo
。
此外,我建议使用类似forever之类的内容,以便在崩溃后保持您的流程正常运行。