diff --git a/README.md b/README.md index 9cafe98..63b194c 100644 --- a/README.md +++ b/README.md @@ -88,6 +88,9 @@ Apply update without check the current version #### arkmanager update --safe Waits for server to perform world save and then updates. +#### arkmanager update --warn +Warns the players for a configurable amount of time before updating. Should be suitable for adding to a cron job. + #### arkmanager status Get the status of the server. Show if the process is running, if the server is up and the current version number diff --git a/tools/arkmanager b/tools/arkmanager index 80fa4a3..df92d7d 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -165,6 +165,14 @@ doBroadcast(){ rconcmd "broadcast $1" >/dev/null } +# +# Broadcast message with echo +# +doBroadcastWithEcho(){ + echo "$1" + doBroadcast "$1" +} + # # Check if a new version is available but not apply it # @@ -537,6 +545,64 @@ doInstallMod(){ fi } +# +# Waits for a configurable number of minutes before updating the server +# +doWarnUpdate(){ + cd "$arkserverroot" + + if isUpdateNeeded; then + local pid=`getServerPID` + if [ -n "$pid" ]; then + local warnmsg + local warnminutes=$(( arkwarnminutes )) + if (( warnminutes == 0 )); then + warnminutes=60 + fi + + local warnintervals=( 90 60 45 30 20 15 10 5 4 3 2 1 ) + + for warninterval in "${warnintervals[@]}"; do + if [ "`getServerPID`" != "$pid" ]; then + echo "Server has stopped. Aborting update" + return 1 + fi + if (( arkwarnminutes > warninterval )); then + if [ -n "$msgWarnUpdateMinutes" ]; then + warnmsg="$(printf "$msgWarnUpdateMinutes" "$warnminutes")" + else + warnmsg="$(printf "This ARK server will shutdown for an update in %d minutes" "$warnminutes")" + fi + doBroadcastWithEcho "$warnmsg" + sleep $(( warnminutes - warninterval ))m + warnminutes=$warninterval + fi + done + + local warnseconds=90 + warnintervals=( 60 45 30 20 15 10 5 0 ) + for warninterval in "${warnintervals[@]}"; do + if [ "`getServerPID`" != "$pid" ]; then + echo "Server has stopped. Aborting update" + return 1 + fi + if [ -n "$msgWarnUpdateMinutes" ]; then + warnmsg="$(printf "$msgWarnUpdateMinutes" "$warnminutes")" + else + warnmsg="$(printf "This ARK server will shutdown for an update in %d seconds" "$warnseconds")" + fi + doBroadcastWithEcho "$warnmsg" + sleep $(( warnseconds - warninterval ))s + done + fi + + if [ "`getServerPID`" != "$pid" ]; then + echo "Server has stopped. Aborting update" + fi + doUpdate + fi +} + # # Copies server state to a backup directory # @@ -741,6 +807,9 @@ while true; do elif [ "$2" == "--safe" ]; then doSafeUpdate shift + elif [ "$2" == "--warn" ]; then + doWarnUpdate + shift else doUpdate fi @@ -792,6 +861,7 @@ while true; do echo "update Check for a new ARK server version, if needed, stops the server, updates it, and starts it again" echo "update --force Apply update without check the current version" echo "update --safe Wait for server to perform world save and update." + echo "update --warn Warn players before updating server" echo "upgrade Check for a new ARK Server Tools version and upgrades it if needed" echo "useconfig Use the configuration overrides in the specified config name or file" exit 1 diff --git a/tools/arkmanager.cfg b/tools/arkmanager.cfg index 459c543..6d55038 100644 --- a/tools/arkmanager.cfg +++ b/tools/arkmanager.cfg @@ -10,6 +10,12 @@ steamcmd_appinfocache="/home/steam/Steam/appcache/appinfo.vdf" # cache of t arkserverroot="/home/steam/ARK" # path of your ARK server files (default ~/ARK) arkserverexec="ShooterGame/Binaries/Linux/ShooterGameServer" # name of ARK server executable arkbackupdir="/home/steam/ARK-Backups" # path to backup directory +arkwarnminutes="60" # number of minutes to warn players when using update --warn + +# Update warning messages +# 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" # ARK server options - use ark_= # comment out these values if you want to define them