簡體   English   中英

崩潰后如何自動重啟節點腳本-或啟動該節點的init.d服務?

[英]How to auto restart Node script - or init.d service starting that node - after crash?

我目前正在運行Raspbian的Raspberry PI上運行一個node.js腳本。 該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

更新:能夠自己在Node本身中修復它。 https://stackoverflow.com/a/50413860/3037607

您可能應該使用pm2運行腳本,它是節點應用程序的進程管理器,如果崩潰到一定數量的重新啟動次數,它將重新啟動節點程序。

一旦安裝了pm2 ,請在init.d腳本中更改以下行

node /home/pi/myscript.js

對此:

pm2 start /home/pi/myscript.js

您還將獲得一些其他好處,例如使用pm2啟動/停止/重新啟動應用程序以及進行一些日志記錄,以便可以追溯應用程序崩潰的原因。

在深入研究Node可能性之后,我找到了一種不使腳本崩潰的方法,並且如果未捕獲到異常,則只需重新啟動一切即可:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM