From 45ace7756505bbf07a3ac87a058c5a78e28155c8 Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Fri, 11 Dec 2015 06:00:00 +1000 Subject: [PATCH] Add the option to warn on shutdown and restart --- tools/arkmanager | 69 +++++++++++++++++++++++++++++++++++------------- 1 file changed, 51 insertions(+), 18 deletions(-) diff --git a/tools/arkmanager b/tools/arkmanager index 7bb5993..01d60fb 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -682,6 +682,9 @@ doStartAll(){ # doStop() { if isTheServerRunning; then + if [ " $* " =~ " --warn " ]; then + doWarn "$1" + fi tput sc echo "Stopping server..." echo "`timestamp`: stopping" >> "$logdir/$arkmanagerLog" @@ -758,9 +761,47 @@ doInstall() { # # Waits for a configurable number of minutes before updating the server # -doUpdateWarn(){ +doWarn(){ cd "$arkserverroot" + local warnmsgmin + local warnmsgsec + + if [ "$1" == "update" ]; then + if [ -n "$msgWarnUpdateMinutes" ]; then + warnmsgmin="$msgWarnUpdateMinutes" + else + warnmsgmin="This ARK server will shutdown for an update in %d minutes" + fi + if [ -n "$msgWarnUpdateSeconds" ]; then + warnmsgsec="$msgWarnUpdateSeconds" + else + warnmsgsec="This ARK server will shutdown for an update in %d seconds" + fi + elif [ "$1" == "restart" ]; then + if [ -n "$msgWarnRestartMinutes" ]; then + warnmsgmin="$msgWarnRestartMinutes" + else + warnmsgmin="This ARK server will shutdown for a restart in %d minutes" + fi + if [ -n "$msgWarnRestartSeconds" ]; then + warnmsgsec="$msgWarnRestartSeconds" + else + warnmsgsec="This ARK server will shutdown for a restart in %d seconds" + fi + else + if [ -n "$msgWarnShutdownMinutes" ]; then + warnmsgmin="$msgWarnShutdownMinutes" + else + warnmsgmin="This ARK server will shutdown in %d minutes" + fi + if [ -n "$msgWarnShutdownSeconds" ]; then + warnmsgsec="$msgWarnShutdownSeconds" + else + warnmsgsec="This ARK server will shutdown in %d seconds" + fi + fi + local pid=`getServerPID` local sleeppid if [ -n "$pid" ]; then @@ -774,22 +815,18 @@ doUpdateWarn(){ for warninterval in "${warnintervals[@]}"; do if [ "`getServerPID`" != "$pid" ]; then - echo "Server has stopped. Aborting update" + echo "Server has stopped. Aborting $1" return 1 fi if (( warnminutes > warninterval )); then sleep 1m & sleeppid=$! - if [ -n "$msgWarnUpdateMinutes" ]; then - warnmsg="$(printf "$msgWarnUpdateMinutes" "$warnminutes")" - else - warnmsg="$(printf "This ARK server will shutdown for an update in %d minutes" "$warnminutes")" - fi + warnmsg="$(printf "$warnmsgmin" "$warnminutes")" doBroadcastWithEcho "$warnmsg" for (( min = warnminutes - 1; min >= warninterval; min-- )); do numplayers=$(numPlayersConnected) if (( numplayers + 0 == 0 )); then - echo "Nobody is connected. Updating immediately" + echo "Nobody is connected. Shutting down immediately" return 0 fi wait $sleeppid @@ -811,16 +848,12 @@ doUpdateWarn(){ echo "Server has stopped. Aborting update" return 1 fi - if [ -n "$msgWarnUpdateSeconds" ]; then - warnmsg="$(printf "$msgWarnUpdateSeconds" "$warnseconds")" - else - warnmsg="$(printf "This ARK server will shutdown for an update in %d seconds" "$warnseconds")" - fi + warnmsg="$(printf "$warnmsgsec" "$warnseconds")" doBroadcastWithEcho "$warnmsg" if (( warnseconds >= 20 )); then numplayers=$(numPlayersConnected) if (( numplayers + 0 == 0 )); then - echo "Nobody is connected. Updating immediately" + echo "Nobody is connected. Shutting down immediately" return 0 fi fi @@ -830,7 +863,7 @@ doUpdateWarn(){ fi if [ "`getServerPID`" != "$pid" ]; then - echo "Server has stopped. Aborting update" + echo "Server has stopped. Aborting $1" return 1 fi @@ -952,7 +985,7 @@ doUpdate() { done echo "`timestamp`: Save file newer than 1 minute. Performing an update." >> "$logdir/update.log" elif [ "$updatetype" == "warn" ]; then - if ! doUpdateWarn; then + if ! doWarn update; then return 1 fi elif [ "$updatetype" == "ifempty" ]; then @@ -1513,7 +1546,7 @@ while true; do doStopAll shift else - doStop + doStop stop "${options[@]}" fi ;; restart) @@ -1521,7 +1554,7 @@ while true; do if [ "$2" == "--all" ]; then doStopAll else - doStop + doStop restart "${options[@]}" fi echo "`timestamp`: stop" >> "$logdir/$arkmanagerLog" sleep 1