From b6c41ca5e2678af0a983b62da0a9b7da9c51654a Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Thu, 29 Sep 2016 22:54:00 +1000 Subject: [PATCH] Restart the server if it stops listening --- tools/arkmanager | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/tools/arkmanager b/tools/arkmanager index 9a32289..f690b68 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -920,6 +920,8 @@ doRun() { restartserver=1 touch "$arkserverroot/$arkautorestartfile" fi + # Retries for checking it the server comes back up after going down + serverdowntries=0 sleep 5 @@ -927,6 +929,7 @@ doRun() { # Grab the current server PID local pid="`getServerPID`" if [ "$pid" == "$serverpid" ]; then + serverdowntries=0 if [ "$restartserver" -eq 0 ]; then # Check if the server has fully started if ! isTheServerUp; then @@ -935,6 +938,28 @@ doRun() { touch "$arkserverroot/$arkautorestartfile" restartserver=1 fi + elif isTheServerUp; then + (( serverdowntries++ )) + + if (( serverdowntries > 12 )); then + # Server has not been listening for 60 seconds, so restart it. + echo "`timestamp`: The server has stopped listening" + echo "`timestamp`: Restarting server" + for (( i = 0; i < 5; i++ )); do + if ! kill -0 "$serverpid"; then + break + fi + kill -INT "$serverpid" + sleep 5 + done + if kill -0 "$serverpid"; then + echo "`timestamp`: Graceful restart failed - killing server" + kill -KILL "$serverpid" + fi + + # Exit the server check loop + break + fi fi else echo "`timestamp`: Bad PID '$pid'; expected '$serverpid'"