在启动时启动Node.js应用程序
我正在运行Raspberry Pi,运行一个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.10.24这样的预编译的Pi版本,你可能会遇到PATH问题。
您可以提供完整path作为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
,你可以使用sudo visudo
将PATH添加到Defaults secure_path
。
此外,我会build议使用永远的东西,以保持你的进程后崩溃,什么不是。
我通过首先检查在RaspberryPi上安装node.js的位置来解决这个问题:
which node
这给了我:
/usr/local/bin/node
打开crontabconfiguration:
sudo crontab -e
然后在我的crontab中:
@reboot sudo /usr/local/bin/node <complete path to your .js app> &
保存,重启,并解决问题!
Mohit是正确的,但只是为了澄清,您可以使用readlink来find您的Node.js应用程序的完整path,因为稍后将需要添加为cron作业。
readlink -f <<name of file >>
比如readlink -f HAP-NodeJS/Core.js
结果在/home/pi/HAP-NodeJS/Core.js
您也可以使用which node
来查找安装node.js的完整path
接下来,使用sudo crontab -e
创build一个新的cron作业,并在最后添加以下代码:
@reboot sudo /usr/local/bin/node <<.js application path>> &
例如,我的代码看起来像这样。
@reboot sudo /usr/local/bin/node /home/pi/HAP-NodeJS/Core.js &
重启后(或启动),你的Node.js应该运行。 希望这个清除的东西。