mirror of
https://github.com/eliasstepanik/ark-ac-server-tools.git
synced 2026-01-27 08:48:27 +00:00
Merge pull request #121 from klightspeed/1.3-dev
Make backup function more robust
This commit is contained in:
commit
8c9d9f1f7f
@ -276,7 +276,7 @@ function isTheServerUp(){
|
|||||||
# run function
|
# run function
|
||||||
#
|
#
|
||||||
doRun() {
|
doRun() {
|
||||||
arkserveropts=$serverMap
|
arkserveropts="$serverMap"
|
||||||
|
|
||||||
# bring in ark_... options
|
# bring in ark_... options
|
||||||
for varname in "${!ark_@}"; do
|
for varname in "${!ark_@}"; do
|
||||||
@ -402,7 +402,7 @@ doSafeUpdate(){
|
|||||||
cd "$arkserverroot"
|
cd "$arkserverroot"
|
||||||
|
|
||||||
if isUpdateNeeded; then
|
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"
|
echo "`timestamp`: Save file older than 1 minute. Delaying update." >> "$logdir/update.log"
|
||||||
sleep 30s
|
sleep 30s
|
||||||
done
|
done
|
||||||
@ -421,10 +421,82 @@ doBackup(){
|
|||||||
local datestamp=`date +"%Y-%m-%d_%H.%M.%S"`
|
local datestamp=`date +"%Y-%m-%d_%H.%M.%S"`
|
||||||
local backupdir="${arkbackupdir}/${datestamp}"
|
local backupdir="${arkbackupdir}/${datestamp}"
|
||||||
mkdir -p "$backupdir"
|
mkdir -p "$backupdir"
|
||||||
cp -p "${arkserverroot}/ShooterGame/Saved/SavedArks/${serverMap}.ark" "${backupdir}/${serverMap}.ark"
|
|
||||||
cp -p "${arkserverroot}/ShooterGame/Saved/SavedArks/"*.arkprofile "${backupdir}"
|
# ARK server uses Write-Unlink-Rename
|
||||||
cp -p "${arkserverroot}/ShooterGame/Saved/SavedArks/"*.arktribe "${backupdir}"
|
echo -ne "${NORMAL} Copying ARK world file "
|
||||||
cp -p "${arkserverroot}/ShooterGame/Saved/Config/LinuxServer/GameUserSettings.ini" "${backupdir}"
|
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"
|
||||||
|
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
|
||||||
|
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 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
|
||||||
|
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 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
|
||||||
|
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
|
||||||
}
|
}
|
||||||
|
|
||||||
#
|
#
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user