我目前在运行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
答案 0 :(得分:2)
您可能应该使用pm2运行您的脚本,Google Maps URLs是节点应用程序的进程管理器,如果它崩溃到一定次数的重新启动,它将重新启动您的节点程序。
安装pm2
后,在init.d脚本上更改以下行
node /home/pi/myscript.js
到它:
pm2 start /home/pi/myscript.js
您还可以获得其他一些细节,例如使用pm2
启动/停止/重启您的应用以及一些日志记录,以便您可以回溯应用崩溃的原因。
答案 1 :(得分:0)
在深入了解Node可能性后,我发现了一种不会使脚本崩溃的方法,如果没有捕获到异常,只需重新启动所有内容:
process.on('uncaughtException', function(err){
console.log(err);
restartMyScript();
});