#!/bin/sh # usage (in run script): checkrespawn command ... min_time_btween_fails=30 fail_after=7 retry_after=120 file="./supervise/checkrespawn" statusfile="./supervise/status_my.checkrespawn" # when manually restarting service, # don't wait and reset checkrespawn's counter # supervise will start service immediately term() { > $file > $status_file exit } trap "term" SIGTERM [[ ! -f $file ]] && touch $file source $file now=`date +%s` cmp=$((last + min_time_btween_fails)) if [ $cmp -gt $now ] then let cnt=cnt+1 if [ $cnt -ge $fail_after ]; then echo "SERVICE: ERROR: Respawning too fast, waiting!" for i in `seq $retry_after`; do echo " * Respawning too fast, start delayed: $((retry_after - i + 1)) " > $statusfile sleep 1 done cnt=0 fi fi > $statusfile echo "last=$now" > $file echo "cnt=$cnt" >> $file exec "$@"