From 8c05d7bf1e2558855bd7455169d4e116b660c50f Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Fri, 9 Sep 2016 13:17:43 +1000 Subject: [PATCH 1/5] Touch app manifest on update Touch the app manifest on update in order to force other instances to restart when an update is run. --- tools/arkmanager | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tools/arkmanager b/tools/arkmanager index a8d03c6..85b3d8c 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -1190,6 +1190,10 @@ doUpdate() { doStart --noautoupdate fi fi + + if [ -z "$bgupdate" ]; then + touch "${arkserverroot}/steamapps/appmanifest_${appid}.acf" + fi else echo "Your server is already up to date! The most recent version is ${bnumber}." echo "`timestamp`: No update needed." >> "$logdir/update.log" From bd5ef349bc30ccbcab0badfe06156cd816e4f95c Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Sat, 17 Sep 2016 19:55:07 +1000 Subject: [PATCH 2/5] Suffix autostart and autorestart with instance name --- tools/arkmanager | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/tools/arkmanager b/tools/arkmanager index 85b3d8c..93d9f46 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -148,7 +148,6 @@ arkserverLog="arkserver.log" # here is logged the output of ShooterGameServer appid="${appid:-376030}" mod_appid="${mod_appid:-346110}" -arkautorestartfile="${arkautorestartfile:-ShooterGame/Saved/.autorestart}" install_bindir="${install_bindir:-${0%/*}}" install_libexecdir="${install_libexecdir:-${install_bindir%/*}/libexec/arkmanager}" @@ -736,7 +735,7 @@ doRun() { # start function # doStart() { - touch "${arkserverroot}/.startAfterUpdate" + touch "${arkserverroot}/.startAfterUpdate-${instance}" if [ -f "${arkserverroot}/.ark-update.lock" ]; then local updatepid="$(<"${arkserverroot}/.ark-update.lock")" @@ -785,7 +784,7 @@ doStartAll(){ # doStop() { if [ "$1" != "update" ]; then - rm -f "${arkserverroot}/.startAfterUpdate" + rm -f "${arkserverroot}/.startAfterUpdate-${instance}" fi if isTheServerRunning; then @@ -1184,8 +1183,8 @@ doUpdate() { rm -f "${arkserverroot}/.ark-update.lock" # we restart the server only if it was started before the update if [ -z "$noautostart" ]; then - if [ $serverWasAlive -eq 1 ] || [ -f "${arkserverroot}/.startAfterUpdate" ]; then - rm -f "${arkserverroot}/.startAfterUpdate" + if [ $serverWasAlive -eq 1 ] || [ -f "${arkserverroot}/.startAfterUpdate-${instance}" ]; then + rm -f "${arkserverroot}/.startAfterUpdate-${instance}" rm -f "${arkserverroot}/.ark-update.lock" doStart --noautoupdate fi @@ -1725,6 +1724,7 @@ useConfig() { echo "Error: arkserverroot not set" exit 1 fi + arkautorestartfile="${arkautorestartfile:-ShooterGame/Saved/.autorestart-${1}}" } showUsage() { From 5770903960f9c45265f8190ae691d24b06fc20e9 Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Sat, 17 Sep 2016 20:13:44 +1000 Subject: [PATCH 3/5] Don't use the old `ps -ef` method with clusterid --- tools/arkmanager | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tools/arkmanager b/tools/arkmanager index 2395b88..f0e1e29 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -513,7 +513,9 @@ function getServerPID(){ return fi fi - ps -ef | grep "$arkserverroot/$arkserverexec" | grep -v grep | awk '{print $2}' + if [ -z "$arkopt_clusterid" ]; then + ps -ef | grep "$arkserverroot/$arkserverexec" | grep -v grep | awk '{print $2}' + fi } # From 437d628a008b4647d5439a4a6282644f944df46e Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Sat, 17 Sep 2016 20:18:46 +1000 Subject: [PATCH 4/5] Add old PID file; remove PID files on stop --- tools/arkmanager | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/tools/arkmanager b/tools/arkmanager index f0e1e29..f0cc933 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -513,6 +513,14 @@ function getServerPID(){ return fi fi + if [ -f "${arkserverroot}/${arkserveroldpidfile}" ]; then + serverpid="$(<"${arkserverroot}/${arkserveroldpidfile}")" + if kill -0 "$serverpid" >/dev/null 2>&1; then + echo $serverpid + return + fi + fi + if [ -z "$arkopt_clusterid" ]; then ps -ef | grep "$arkserverroot/$arkserverexec" | grep -v grep | awk '{print $2}' fi @@ -996,6 +1004,10 @@ doStop() { fi fi + rm -f "${arkserverroot}/${arkserverpidfile}" + rm -f "${arkserverroot}/${arkserveroldpidfile}" + rm -f "${arkserverroot}/${arkmanagerpidfile}" + tput rc; tput ed; echo "The server has been stopped" echo "`timestamp`: stopped" >> "$logdir/$arkmanagerLog" @@ -2375,6 +2387,7 @@ useConfig() { fi arkautorestartfile="${arkautorestartfile:-ShooterGame/Saved/.autorestart-${1}}" arkserverpidfile="${arkserverpidfile:-ShooterGame/Saved/.arkserver-${1}.pid}" + arkserveroldpidfile="ShooterGame/Saved/.arkserver.pid" arkmanagerpidfile="${arkmanagerpidfile:-ShooterGame/Saved/.arkmanager-${1}.pid}" } From fd23dac69647cee5bf2b487b1b04d04123ece056 Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Tue, 13 Sep 2016 20:29:32 +1000 Subject: [PATCH 5/5] Sync more files; accept missing version.txt --- tools/arkmanager | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/tools/arkmanager b/tools/arkmanager index f0cc933..c89b000 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -1428,16 +1428,16 @@ doUpdate() { cp -al "$arkserverroot/ShooterGame/." "$arkStagingDir/ShooterGame" cp -al "$arkserverroot/Engine/." "$arkStagingDir/Engine" cp -al "$arkserverroot/linux64/." "$arkStagingDir/linux64" - cp -al "$arkserverroot/PackageInfo.bin" "$arkStagingDir/PackageInfo.bin" - cp -al "$arkserverroot/steamclient.so" "$arkStagingDir/steamclient.so" - cp -al "$arkserverroot/version.txt" "$arkStagingDir/version.txt" cp -a "$arkserverroot/steamapps/." "$arkStagingDir/steamapps" + cp -l "$arkserverroot/"* "$arkStagingDir" else rsync -a "$arkserverroot/." "$arkStagingDir/." fi rm -rf "$arkStagingDir/ShooterGame/Content/Mods/"* rm -rf "$arkStagingDir/ShooterGame/Saved/"* rm -rf "$arkStagingDir/Engine/Binaries/ThirdParty/SteamCMD/Linux/steamapps" + cp -al "$arkserverroot/ShooterGame/Content/Mods/111111111/." "$arkStagingDir/ShooterGame/Content/Mods/111111111" + cp -l "$arkserverroot/ShooterGame/Content/Mods/111111111.mod" "$arkStagingDir/ShooterGame/Content/Mods/111111111.mod" fi if [ -z "$nodownload" ]; then @@ -1469,7 +1469,12 @@ doUpdate() { fi echo "Not applying update - download-only enabled" elif [ -n "$appupdate" -o -n "$modupdate" -o -n "$bgupdate" ]; then - arkversion="$(<"$arkserverroot/version.txt")" + if [ -f "$arkserverroot/version.txt" ]; then + arkversion="$(<"$arkserverroot/version.txt")" + else + arkversion="$(getCurrentVersion; echo "$instver")" + fi + if isTheServerRunning; then if [ "$updatetype" == "safe" ]; then while [ ! `find $arkserverroot/ShooterGame/Saved/SavedArks -mmin -1 -name ${serverMap##*/}.ark` ]; do @@ -1510,9 +1515,7 @@ doUpdate() { cp -alu --remove-destination "$arkStagingDir/ShooterGame/." "$arkserverroot/ShooterGame" cp -alu --remove-destination "$arkStagingDir/Engine/." "$arkserverroot/Engine" cp -alu --remove-destination "$arkStagingDir/linux64/." "$arkserverroot/linux64" - cp -alu --remove-destination "$arkStagingDir/PackageInfo.bin" "$arkserverroot/PackageInfo.bin" - cp -alu --remove-destination "$arkStagingDir/steamclient.so" "$arkserverroot/steamclient.so" - cp -alu --remove-destination "$arkStagingDir/version.txt" "$arkserverroot/version.txt" + cp -lu --remove-destination "$arkStagingDir/"* "$arkserverroot" cp -au --remove-destination "$arkStagingDir/steamapps/." "$arkserverroot/steamapps" else rsync -a "$arkStagingDir/." "$arkserverroot" @@ -2299,7 +2302,9 @@ printStatus(){ getCurrentVersion echo -e "$NORMAL" "Server build ID: " "$GREEN" $instver "$NORMAL" - echo -e "$NORMAL" "Server version: " "$GREEN" "$(<"$arkserverroot/version.txt")" "$NORMAL" + if [ -f "$arkserverroot/version.txt" ]; then + echo -e "$NORMAL" "Server version: " "$GREEN" "$(<"$arkserverroot/version.txt")" "$NORMAL" + fi } getAllInstanceNames(){