首页 文章

如何自动重启节点脚本 - 或启动该节点的init.d服务 - 崩溃后?

提问于
浏览
0

我目前正在我的Raspberry PI上运行一个运行Raspbian的node.js脚本 . 那个node.js脚本在启动时启动,所以我只需要插入电路板 .

但是,如果脚本崩溃导致节点退出,那么当节点服务崩溃时,如何使引导服务(启动节点脚本)自动重启?

这是我在 /etc/init.d 中的bootservice的一个例子:

#! /bin/sh
### BEGIN INIT INFO
# Provides:          MyScriptService
# Required-Start:    $all
# Required-Stop:     
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Starts my node.js script.
### END INIT INFO

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/opt/bin

. /lib/init/vars.sh
. /lib/lsb/init-functions

case "$1" in
  start)
    log_begin_msg "Starting my script"

    node /home/pi/myscript.js

    log_end_msg $?
    exit 0
    ;;
  stop)
    log_begin_msg "Stopping my script"


    log_end_msg $?
    exit 0
    ;;
  *)
    exit 1
    ;;
esac

UPDATE: 能够在Node内部自行修复它 . https://stackoverflow.com/a/50413860/3037607

2 回答

  • 2

    您可能应该使用pm2运行您的脚本,这是节点应用程序的进程管理器,如果它崩溃到一定次数的重新启动,它将重新启动您的节点程序 .

    安装 pm2 后,在init.d脚本上更改以下行

    node /home/pi/myscript.js
    

    它:

    pm2 start /home/pi/myscript.js
    

    您还将获得一些其他细节,例如使用 pm2 启动/停止/重启您的应用程序以及一些日志记录,以便您可以回溯应用程序崩溃的原因 .

  • 0

    在深入了解Node可能性之后,我发现了一种不会使脚本崩溃的方法,如果没有捕获到异常,只需重新启动所有内容:

    process.on('uncaughtException', function(err){
      console.log(err);
      restartMyScript();  
    });
    

相关问题