在启动时启动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应该运行。 希望这个清除的东西。