#!/usr/bin/env bash #PARAMETER 1: directory #PARAMETER 2: binary file _bin_path=$1 _bin_file=$2 _instant_crash_count=0 _restart_count=0 if [ "$#" -ne 2 ]; then echo "Usage: $0 path filename" echo "Example: $0 $HOME/azeroth-server/bin worldserver" exit 1 fi while true do if [ ! -f "$_bin_path/$_bin_file" ]; then echo "$_bin_path/$_bin_file doesn't exists!" exit 1 fi STARTING_TIME=$(date +%s) cd "$_bin_path" && "./$_bin_file" # &>/dev/null; _exit_code=$? echo "exit code: $_exit_code" # stop restarter on SIGKILL (disabled for now) # 128 + 9 (SIGKILL) #if [ $_exit_code -eq 137 ]; then # echo "$_bin_file has been killed" # exit 0 #fi echo "$_bin_file terminated, restarting..." ENDING_TIME=$(date +%s) DIFFERENCE=$(( $ENDING_TIME - $STARTING_TIME )) ((_restart_count++)) echo "$_bin_file Terminated after $DIFFERENCE seconds, termination count: : $_restart_count" if [ $DIFFERENCE -lt 10 ]; then # increment instant crash if runtime is lower than 10 seconds ((_instant_crash_count++)) else _instant_crash_count=0 # reset count fi if [ $_instant_crash_count -gt 5 ]; then echo "$_bin_file Restarter exited. Infinite crash loop prevented. Please check your system" exit 1 fi done