[英]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.