如何在系统启动时启动Node.js应用程序?

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应该运行.希望这能清除事情.


Kev*_*lly 4

如果您使用的是预构建的 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

另外,我建议使用诸如“永远”之类的东西来保持进程在崩溃后继续运行。