From 44fa13cdc64a81a119864939ae013bda55e30cad Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Sat, 18 Jul 2015 04:53:40 +1000 Subject: [PATCH 1/3] Make backup function more robust --- tools/arkmanager | 63 +++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 60 insertions(+), 3 deletions(-) diff --git a/tools/arkmanager b/tools/arkmanager index 8f819e6..2f86567 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -421,10 +421,67 @@ doBackup(){ local datestamp=`date +"%Y-%m-%d_%H.%M.%S"` local backupdir="${arkbackupdir}/${datestamp}" mkdir -p "$backupdir" + + # ARK server uses Write-Unlink-Rename + echo -ne "${NORMAL} Copying ARK world file " cp -p "${arkserverroot}/ShooterGame/Saved/SavedArks/${serverMap}.ark" "${backupdir}/${serverMap}.ark" - cp -p "${arkserverroot}/ShooterGame/Saved/SavedArks/"*.arkprofile "${backupdir}" - cp -p "${arkserverroot}/ShooterGame/Saved/SavedArks/"*.arktribe "${backupdir}" - cp -p "${arkserverroot}/ShooterGame/Saved/Config/LinuxServer/GameUserSettings.ini" "${backupdir}" + if [ ! -f "${backupdir}/${serverMap}.ark" ]; then + sleep 2 + cp -p "${arkserverroot}/ShooterGame/Saved/SavedArks/${serverMap}.ark" "${backupdir}/${serverMap}.ark" + fi + if [ -f "${backupdir}/${serverMap}.ark" ]; then + echo -e "${NORMAL}[ ${GREEN}OK${NORMAL} ]" + else + echo -e "${NORMAL}[ ${RED}FAILED${NORMAL} ]" + fi + + # ARK server uses Lock-Truncate-Write-Unlock + # Unfortunately we can't lock the file, as + # ARK server uses a non-blocking lock and will + # fail to update the file if the lock fails. + echo -e "${NORMAL} Copying ARK profile files" + for f in "${arkserverroot}/ShooterGame/Saved/SavedArks/"*.arkprofile; do + echo -ne "${NORMAL} ${f##*/} " + cp -p "${f}" "${backupdir}/${f##*/}" + if [ ! -s "${backupdir}/${f##*/}" ]; then + sleep 2 + cp -p "${f}" "${backupdir}/${f##*/}" + fi + if [ -s "${backupdir}/${f##*/}" ]; then + echo -e "${NORMAL}[ ${GREEN}OK${NORMAL} ]" + else + echo -e "${NORMAL}[ ${RED}FAILED${NORMAL} ]" + fi + done + + # ARK server uses Lock-Truncate-Write-Unlock + echo -e "${NORMAL} Copying ARK tribe files " + for f in "${arkserverroot}/ShooterGame/Saved/SavedArks/"*.arktribe; do + echo -ne "${NORMAL} ${f##*/} " + cp -p "${f}" "${backupdir}/${f##*/}" + if [ ! -s "${backupdir}/${f##*/}" ]; then + sleep 2 + cp -p "${f}" "${backupdir}/${f##*/}" + fi + if [ -s "${backupdir}/${f##*/}" ]; then + echo -e "${NORMAL}[ ${GREEN}OK${NORMAL} ]" + else + echo -e "${NORMAL}[ ${RED}FAILED${NORMAL} ]" + fi + done + + # ARK server uses Lock-Truncate-Write-Unlock + echo -ne "${NORMAL} Copying GameUserSettings.ini " + cp -p "${arkserverroot}/ShooterGame/Saved/Config/LinuxServer/GameUserSettings.ini" "${backupdir}/GameUserSettings.ini" + if [ ! -s "${backupdir}/GameUserSettings.ini" ]; then + sleep 2 + cp -p "${f}" "${backupdir}/${f##*/}" + fi + if [ -f "${backupdir}/GameUserSettings.ini" ]; then + echo -e "${NORMAL}[ ${GREEN}OK${NORMAL} ]" + else + echo -e "${NORMAL}[ ${RED}FAILED${NORMAL} ]" + fi } # From a14f410fc9a0b2b02fa62c6d138cd743ff579a05 Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Sat, 18 Jul 2015 08:33:19 +1000 Subject: [PATCH 2/3] Add last-ditch backup attempt --- tools/arkmanager | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/tools/arkmanager b/tools/arkmanager index 2f86567..f382c21 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -429,6 +429,11 @@ doBackup(){ sleep 2 cp -p "${arkserverroot}/ShooterGame/Saved/SavedArks/${serverMap}.ark" "${backupdir}/${serverMap}.ark" fi + # If both attempts fail, server may have + # crashed between unlink and rename + if [ ! -f "${backupdir}/${serverMap}.ark" ]; then + cp -p "${arkserverroot}/ShooterGame/Saved/SavedArks/${serverMap}.tmp" "${backupdir}/${serverMap}.ark" + fi if [ -f "${backupdir}/${serverMap}.ark" ]; then echo -e "${NORMAL}[ ${GREEN}OK${NORMAL} ]" else @@ -447,6 +452,11 @@ doBackup(){ sleep 2 cp -p "${f}" "${backupdir}/${f##*/}" fi + # If both attempts fail, server may have + # crashed between truncate and write + if [ ! -s "${backupdir}/${f##*/}" ]; then + cp -p "${f%.arkprofile}.tmpprofile" "${backupdir}/${f##*/}" + fi if [ -s "${backupdir}/${f##*/}" ]; then echo -e "${NORMAL}[ ${GREEN}OK${NORMAL} ]" else @@ -463,6 +473,11 @@ doBackup(){ sleep 2 cp -p "${f}" "${backupdir}/${f##*/}" fi + # If both attempts fail, server may have + # crashed between truncate and write + if [ ! -s "${backupdir}/${f##*/}" ]; then + cp -p "${f%.arktribe}.tmptribe" "${backupdir}/${f##*/}" + fi if [ -s "${backupdir}/${f##*/}" ]; then echo -e "${NORMAL}[ ${GREEN}OK${NORMAL} ]" else From f6d402b6fe9b123d3bf62a67d58db274e84e4c7d Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Sat, 18 Jul 2015 10:28:22 +1000 Subject: [PATCH 3/3] Add support for custom modded maps --- tools/arkmanager | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/tools/arkmanager b/tools/arkmanager index f382c21..7825bc3 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -276,7 +276,7 @@ function isTheServerUp(){ # run function # doRun() { - arkserveropts=$serverMap + arkserveropts="$serverMap" # bring in ark_... options for varname in "${!ark_@}"; do @@ -402,7 +402,7 @@ doSafeUpdate(){ cd "$arkserverroot" if isUpdateNeeded; then - while [ ! `find $arkserverroot/ShooterGame/Saved/SavedArks -mmin -1 -name $serverMap.ark` ]; do + while [ ! `find $arkserverroot/ShooterGame/Saved/SavedArks -mmin -1 -name ${serverMap##*/}.ark` ]; do echo "`timestamp`: Save file older than 1 minute. Delaying update." >> "$logdir/update.log" sleep 30s done @@ -424,17 +424,17 @@ doBackup(){ # ARK server uses Write-Unlink-Rename echo -ne "${NORMAL} Copying ARK world file " - cp -p "${arkserverroot}/ShooterGame/Saved/SavedArks/${serverMap}.ark" "${backupdir}/${serverMap}.ark" - if [ ! -f "${backupdir}/${serverMap}.ark" ]; then + cp -p "${arkserverroot}/ShooterGame/Saved/SavedArks/${serverMap##*/}.ark" "${backupdir}/${serverMap##*/}.ark" + if [ ! -f "${backupdir}/${serverMap##*/}.ark" ]; then sleep 2 - cp -p "${arkserverroot}/ShooterGame/Saved/SavedArks/${serverMap}.ark" "${backupdir}/${serverMap}.ark" + cp -p "${arkserverroot}/ShooterGame/Saved/SavedArks/${serverMap##*/}.ark" "${backupdir}/${serverMap##*/}.ark" fi # If both attempts fail, server may have # crashed between unlink and rename - if [ ! -f "${backupdir}/${serverMap}.ark" ]; then - cp -p "${arkserverroot}/ShooterGame/Saved/SavedArks/${serverMap}.tmp" "${backupdir}/${serverMap}.ark" + if [ ! -f "${backupdir}/${serverMap##*/}.ark" ]; then + cp -p "${arkserverroot}/ShooterGame/Saved/SavedArks/${serverMap}.tmp" "${backupdir##*/}/${serverMap##*/}.ark" fi - if [ -f "${backupdir}/${serverMap}.ark" ]; then + if [ -f "${backupdir}/${serverMap##*/}.ark" ]; then echo -e "${NORMAL}[ ${GREEN}OK${NORMAL} ]" else echo -e "${NORMAL}[ ${RED}FAILED${NORMAL} ]"