Как автоматически перезапустить Node-скрипт - или службу init.d, запускающую этот узел - после сбоя? - PullRequest
0 голосов
/ 18 мая 2018

В настоящее время у меня запущен скрипт node.js на моем Raspberry PI, работающем под управлением Raspbian.Этот скрипт node.js запускается при загрузке, поэтому мне просто нужно подключить плату.

Но, если сценарий потерпит крах, что приведет к выходу из узла, как я могу создать службу загрузки (которая запускаетскрипт узла на ура) автоматический перезапуск при сбое службы узла?

Вот пример моей службы загрузки в /etc/init.d:

#! /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

ОБНОВЛЕНИЕ: Возможностьисправить это самостоятельно в самом узле.https://stackoverflow.com/a/50413860/3037607

Ответы [ 2 ]

0 голосов
/ 18 мая 2018

После более глубокого поиска в возможностях Node я нашел способ просто не вызвать сбой скрипта, а если исключение не было обнаружено, просто перезапустить все:

process.on('uncaughtException', function(err){
  console.log(err);
  restartMyScript();  
});
0 голосов
/ 18 мая 2018

Вы, вероятно, должны запустить свой сценарий с pm2 , который является менеджером процессов для приложений узлов, он перезапустит вашу программу узлов, если произойдет сбой до определенного числа перезапусков.

Один разу вас установлено pm2, измените следующую строку в вашем скрипте init.d

node /home/pi/myscript.js

на него:

pm2 start /home/pi/myscript.js

Вы также получите некоторые другие тонкости, такие как start / stop/ перезапустите ваше приложение с помощью pm2 и некоторой регистрации, чтобы вы могли определить причину сбоя вашего приложения.

...