use*_*875 10 init.d node.js raspbian
我正在运行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
Run Code Online (Sandbox Code Playgroud)
我在etc/init.d文件夹中运行,运行chmod +x /etc/init.d/MyApp,我可以手动运行它,然后运行sudo update-rc.d MyApp defaults,重启,脚本永远不会运行.我看了一些不同的例子,做了调整,但仍然没有运气.
Moh*_*ani 27
我首先检查了RaspberryPi上安装了node.js的位置,从而解决了这个问题:
which node
Run Code Online (Sandbox Code Playgroud)
这给了我:
/usr/local/bin/node
Run Code Online (Sandbox Code Playgroud)
打开crontab配置:
sudo crontab -e
Run Code Online (Sandbox Code Playgroud)
然后在我的crontab中:
@reboot sudo /usr/local/bin/node <complete path to your .js app> &
Run Code Online (Sandbox Code Playgroud)
保存,重启,问题解决了!
小智 9
Mohit是对的,但为了澄清,您可以使用readlink查找Node.js应用程序的完整路径,因为稍后需要将其添加为cron作业.
readlink -f <<name of file >>
Run Code Online (Sandbox Code Playgroud)
例如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>> &
Run Code Online (Sandbox Code Playgroud)
例如,我的代码看起来像这样.
@reboot sudo /usr/local/bin/node /home/pi/HAP-NodeJS/Core.js &
Run Code Online (Sandbox Code Playgroud)
重启(或启动)后,您的Node.js应该运行.希望这能清除事情.
如果您使用的是预构建的 Pi 版本(例如0.10.24 ),您可能会遇到 PATH 问题。
您可以作为命令的一部分提供节点二进制文件的完整路径,或者确保在运行start之前设置节点二进制文件的路径。/etc/init.d/MyApp我遇到了同样的问题,并尝试了两种方法都取得了成功。此外,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
Run Code Online (Sandbox Code Playgroud)
如果您愿意sudo node,可以将 PATH 添加到Defaults secure_pathusing sudo visudo。
另外,我建议使用诸如“永远”之类的东西来保持进程在崩溃后继续运行。
| 归档时间: |
|
| 查看次数: |
21935 次 |
| 最近记录: |