From 6606ed3cd29dfac1bf4f52814152fcea3f996a1e Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Fri, 11 Dec 2015 05:36:36 +1000 Subject: [PATCH 1/3] Allow all commands to take options --- tools/arkmanager | 62 +++++++++++++++++++++++++++++++++++++----------- 1 file changed, 48 insertions(+), 14 deletions(-) diff --git a/tools/arkmanager b/tools/arkmanager index 4547ebe..7bb5993 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -1456,12 +1456,51 @@ useConfig() { checkConfig while true; do - case "$1" in + options=( ) + args=( ) + command="$1" + shift + nrarg=0 + + # get the number of arguments for commands that take arguments + case "$command" in + installmod) nrarg=1; ;; + broadcast) nrarg=1; ;; + rconcmd) nrarg=1; ;; + useconfig) nrarg=1; ;; + esac + + # Enumerate the options and arguments + while [ $# -ne 0 ]; do + case "$1" in + --) + shift + break + ;; + --args) + nrarg=$# + ;; + --*) + options+=( "$1" ) + ;; + *) + if [ $nrarg -gt 0 ]; then + args+=( "$1" ) + (( nrarg-- )) + else + break + fi + ;; + esac + shift + done + + case "$command" in run) doRun ;; start) - if [ "$2" == "--all" ]; then + if [ " ${options[*]} " =~ " --all " ]; then doStartAll shift else @@ -1469,6 +1508,7 @@ while true; do fi ;; stop) + if [ " ${options[*]} " =~ " --all " ]; then if [ "$2" == "--all" ]; then doStopAll shift @@ -1477,6 +1517,7 @@ while true; do fi ;; restart) + if [ " ${options[*]} " =~ " --all " ]; then if [ "$2" == "--all" ]; then doStopAll else @@ -1484,6 +1525,7 @@ while true; do fi echo "`timestamp`: stop" >> "$logdir/$arkmanagerLog" sleep 1 + if [ " ${options[*]} " =~ " --all " ]; then if [ "$2" == "--all" ]; then doStartAll shift @@ -1497,34 +1539,27 @@ while true; do doInstall ;; update) - args=() - - while [[ "$2" =~ ^-- ]]; do - args=( "${args[@]}" "$2" ) - shift - done - - doUpdate "${args[@]}" + doUpdate "${options[@]}" ;; checkupdate) checkForUpdate ;; installmod) - doInstallMod "$2" + doInstallMod "${args[@]}" shift ;; backup) doBackup ;; broadcast) - doBroadcast "$2" + doBroadcast "${args[@]}" shift ;; saveworld) doSaveWorld ;; rconcmd) - rconcmd "$2" + rconcmd "${args[@]}" shift ;; status) @@ -1597,7 +1632,6 @@ while true; do ;; esac status=$? - shift if [ $# -eq 0 ]; then break fi From 45ace7756505bbf07a3ac87a058c5a78e28155c8 Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Fri, 11 Dec 2015 06:00:00 +1000 Subject: [PATCH 2/3] 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 From c13afcb0d8545997e3be4da15efee40d944099a8 Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Fri, 11 Dec 2015 10:35:52 +1000 Subject: [PATCH 3/3] Add restart / shutdown warning text to config --- tools/arkmanager | 3 --- tools/arkmanager.cfg | 4 ++++ 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/tools/arkmanager b/tools/arkmanager index 01d60fb..de36fc9 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -1542,7 +1542,6 @@ while true; do ;; stop) if [ " ${options[*]} " =~ " --all " ]; then - if [ "$2" == "--all" ]; then doStopAll shift else @@ -1551,7 +1550,6 @@ while true; do ;; restart) if [ " ${options[*]} " =~ " --all " ]; then - if [ "$2" == "--all" ]; then doStopAll else doStop restart "${options[@]}" @@ -1559,7 +1557,6 @@ while true; do echo "`timestamp`: stop" >> "$logdir/$arkmanagerLog" sleep 1 if [ " ${options[*]} " =~ " --all " ]; then - if [ "$2" == "--all" ]; then doStartAll shift else diff --git a/tools/arkmanager.cfg b/tools/arkmanager.cfg index 51e6237..96c8c05 100644 --- a/tools/arkmanager.cfg +++ b/tools/arkmanager.cfg @@ -24,6 +24,10 @@ arkTimeToKeepBackupFiles="10" #Set to Auto # Modify as desired, putting the %d replacement operator where the number belongs msgWarnUpdateMinutes="This ARK server will shutdown for an update in %d minutes" msgWarnUpdateSeconds="This ARK server will shutdown for an update in %d seconds" +msgWarnRestartMinutes="This ARK server will shutdown for a restart in %d minutes" +msgWarnRestartSeconds="This ARK server will shutdown for a restart in %d seconds" +msgWarnShutdownMinutes="This ARK server will shutdown in %d minutes" +msgWarnShutdownSeconds="This ARK server will shutdown in %d seconds" # ARK server options - use ark_= # comment out these values if you want to define them