diff --git a/lib/globals.sh b/lib/globals.sh index e1d39e0..60d1146 100644 --- a/lib/globals.sh +++ b/lib/globals.sh @@ -149,9 +149,20 @@ lock_remote_server() { die "Could not create: $REMOTE_SERVER_LOCKFILE" fi } - unlock_remote_server() { msg "Unlocking remote server." rm -f "$REMOTE_SERVER_LOCKFILE" || die "Could not remove: $REMOTE_SERVER_LOCKFILE" } +wait_until_remote_server_unlocked() { + # wait until dayz-modserver lockfile is released on the NAS + if islocked_remote_server ; then + msg "Remote file server is currently locked" + msg "Sleeping until is no longer locked..." + while islocked_remote_server ; do + echo "Sleeping..." + sleep 10 + done + msg "Server unlocked! Continuing..." + fi +} # ===================================================================================== diff --git a/server_start.sh b/server_start.sh index 8b8ea81..252453b 100644 --- a/server_start.sh +++ b/server_start.sh @@ -49,7 +49,9 @@ export SERVERS="$LOCAL_DAYZ_FILES/servers" ################################# export RESTART_INTERVAL=$((60 * 60 * 4)) # (10 minutes) -export RESTART_INTERVAL=$((10 * 60)) +# export RESTART_INTERVAL=$((10 * 60)) + +export RESTART_INTERVAL=$((1 * 60)) # =================================================== # 03. Mount network drive @@ -78,7 +80,7 @@ check() { init_server() { mkdir -p "$SERVER_HOME" "$CACHE" "$MOD_CACHE" "$STOCK_SERVER_CACHE" "$LOCAL_DAYZ_FILES/stock/maps/$MAP_FOLDER_NAME" - :>"$SERVER_HOME/.modstring" + :>"$SERVER_HOME/modstring" check || die "Failed check()" @@ -99,52 +101,26 @@ load_stock_map_data() { refresh_local_cache() { msg "Refreshing local stock server cache" - if ! islocked_remote_server ; then - do_sync "$REMOTE_STOCK_SERVER"/ "$STOCK_SERVER_CACHE" || die "Failed to copy remote stock server data to local cache" - else - msg "Remote server is locked, sleeping..." - while islocked_remote_server ; do - sleep 15 - echo 'Sleeping...' - done - do_sync "$REMOTE_STOCK_SERVER"/ "$STOCK_SERVER_CACHE" || die "Failed to copy remote stock server data to local cache" - fi + wait_until_remote_server_unlocked + do_sync "$REMOTE_STOCK_SERVER"/ "$STOCK_SERVER_CACHE" || \ + die "Failed to copy remote stock server data to local cache" msg "Sucessfully copied stock server data into local cache" - # ------------------------------------- - msg "Refreshing local map data cache for: $MAP_FOLDER_NAME" - if ! islocked_remote_server ; then - do_sync "$REMOTE_MAPS/$MAP_FOLDER_NAME"/ "$LOCAL_DAYZ_FILES/stock/maps/$MAP_FOLDER_NAME" || \ + wait_until_remote_server_unlocked + do_sync "$REMOTE_MAPS/$MAP_FOLDER_NAME"/ "$LOCAL_DAYZ_FILES/stock/maps/$MAP_FOLDER_NAME" || \ die "Failed to copy remote stock map data for: $MAP_FOLDER_NAME" - else - msg "Remote server is locked, sleeping..." - while islocked_remote_server ; do - sleep 15 - echo 'Sleeping...' - done - do_sync "$REMOTE_MAPS/$MAP_FOLDER_NAME"/ "$LOCAL_DAYZ_FILES/stock/maps/$MAP_FOLDER_NAME" || \ - die "Failed to copy remote stock map data for: $MAP_FOLDER_NAME" - fi msg "Successfully copied stock map data for: $MAP_FOLDER_NAME" - # ------------------------------------- - msg "Refreshing local mods cache" - if ! islocked_remote_server ; then - do_sync "$REMOTE_MODS"/ "$MOD_CACHE" || die "Failed to copy remote mods to local cache" - else - msg "Remote server is locked, sleeping..." - while islocked_remote_server ; do - sleep 15 - echo 'Sleeping...' - done - do_sync "$REMOTE_MODS"/ "$MOD_CACHE" || die "Failed to copy remote mods to local cache" - fi + wait_until_remote_server_unlocked + do_sync "$REMOTE_MODS"/ "$MOD_CACHE" || \ + die "Failed to copy remote mods to local cache" msg "Successfully copied remote mods into local cache" } setup_environment() { + msg "Setting up environment" msg "Copying stock server data from local cache into $SERVER_HOME" # list of all stock server folders for folder in addons battleye bliss docs dta keys ; do @@ -164,12 +140,15 @@ setup_environment() { do_sync "$MOD_CACHE/$MAP_FOLDER_NAME"/ "$SERVER_HOME/mods" || die "Failed to copy mods to $SERVER_HOME" msg "Copying DZSA executable" - do_sync "$REMOTE_DIR/res/software/DZSALModServer.exe" "$SERVER_HOME"/ || die "Failed to copy DZSALModServer.exe" + wait_until_remote_server_unlocked + do_sync "$REMOTE_DIR/res/software/DZSALModServer.exe" "$SERVER_HOME"/ || \ + die "Failed to copy DZSALModServer.exe" } -# finds list of mods to load and stores them in .modstring file +# finds list of mods to load and stores them in modstring file # to be used as parameters to the server load_mods() { + msg "Loading mods" if [ ! -f "$MOD_CACHE/$MAP_FOLDER_NAME/mods.txt" ] ; then die "mods.txt list for $MAP_FOLDER_NAME is missing" fi @@ -208,11 +187,8 @@ load_mods() { # trim the initial leading ';' _modstring=${_modstring#;} - printf '%s\n' "$_modstring" > .modstring - unset _modstring - - msg "Mods successfully loaded. Using modstring:" - printf '"%s"\n' "$(cat .modstring)" + printf '%s\n' "$_modstring" > modstring + msg "Mods successfully loaded." } # =================================================== @@ -220,43 +196,33 @@ load_mods() { # =================================================== start_server() { check || die "Failed check()" - - # wait until dayz-modserver lockfile is released on the NAS - if islocked_remote_server ; then - msg "Remote file server is currently locked" - msg "Sleeping until is no longer locked..." - while islocked_remote_server ; do - echo "Sleeping..." - sleep 10 - done - msg "Server unlocked! Continuing..." - fi - cd "$SERVER_HOME" || die "Could not cd to '$SERVER_HOME'" - msg "Setting up environment" + wait_until_remote_server_unlocked setup_environment || die "Could not set up environment." - - msg "Loading mods" load_mods || die "Could not load mods" - mod_string=$(cat .modstring) # ===================================================================================== # creating temp.bat here to avoid the arg max char limit of windows cmd.exe +PROCESS_NAME="SERVER: $SERVER_NAME" cat > temp.bat </dev/null ||: - echo '====================================' - printf '%s - Server started.\n' "$(date)" - echo '====================================' - - printf '\n**** Sleeping for: %s *****\n\n' "$RESTART_INTERVAL" + msg '%s - Server started.\n' "$(date)" count=0 while [ "$count" -lt "$RESTART_INTERVAL" ] ; do @@ -265,17 +231,12 @@ EOF msg "TIME LEFT BEFORE RESTART: $(( (RESTART_INTERVAL - count) / 60 )) minutes" done - echo "===========================" - - msg "Time up" - msg "Killing server" - cmd.exe /C taskkill /im DayZServer_x64.exe /F - rm -f temp.bat 2>/dev/null ||: + msg "Time up - Killing server" + cmd.exe /C taskkill /FI "WINDOWTITLE eq $PROCESS_NAME" msg "Sleeping 10 seconds to settle" sleep 10 msg "SERVER IS RESTARTING" - } # =================================================== @@ -293,8 +254,7 @@ main() { # this must be here and not up top as we must load it from the SERVER.ENV export SERVER_HOME="$SERVERS/$SERVER_NAME" - # create directories in $SERVER_HOME - # blank the modstring + # create directories in $SERVER_HOME, blank the modstring init_server if [ -e ./serverDZ.cfg ] ; then