finished
This commit is contained in:
208
start.sh
Executable file
208
start.sh
Executable file
@@ -0,0 +1,208 @@
|
||||
#!/bin/sh -e
|
||||
#
|
||||
# shellcheck disable=2043
|
||||
#
|
||||
# -*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
|
||||
|
||||
# -*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
|
||||
# General Settings
|
||||
# -*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
|
||||
export DAYZ_FILES=/mnt/dayz
|
||||
export STOCK_SERVER_DATA="$DAYZ_FILES/stock/DayZServer"
|
||||
|
||||
export MAIN="/mnt/c/DAYZ"
|
||||
export SERVERS="$MAIN/servers"
|
||||
export CACHE="$MAIN/cache"
|
||||
export STORAGE="$MAIN/STORAGE"
|
||||
|
||||
export MOD_CACHE="$CACHE/mods"
|
||||
export RESTART_INTERVAL=$(( 15 * 60 + 30 ))
|
||||
#$((60 * 60 * 4 + 3))
|
||||
|
||||
# -*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
|
||||
# SERVER SPECIFIC SETTINGS
|
||||
# -*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
|
||||
export SERVER_NAME='ZyaD Chernarus'
|
||||
export SERVER_HOME="$SERVERS/$SERVER_NAME"
|
||||
export MAP_FOLDER_NAME='chernarus'
|
||||
export LOCAL_FOLDER_MAP_NAME='dayzOffline.chernarusplus'
|
||||
export SERVER_PORT=2302
|
||||
export SERVER_CPU=8
|
||||
export SERVER_CONFIG_FILE="$SERVER_HOME/serverDZ.cfg"
|
||||
export SERVER_STORAGE="$STORAGE/$SERVER_NAME"
|
||||
|
||||
# -*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
|
||||
# Helper functions
|
||||
# -*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
|
||||
alias do_sync='rsync -vrltDhu --delete --partial --progress'
|
||||
alias do_secure_sync='rsync -cvrltDhu --delete --partial --progress'
|
||||
|
||||
msg() {
|
||||
>&2 printf '[*] %s ...\n' "$*"
|
||||
}
|
||||
|
||||
die() {
|
||||
msg "$*"
|
||||
exit 1
|
||||
}
|
||||
|
||||
debug() {
|
||||
if [ "$DEBUG" ] ; then
|
||||
>&2 printf ' DEBUG: %s\n' "$*"
|
||||
fi
|
||||
}
|
||||
|
||||
# -*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
|
||||
# Checks
|
||||
# -*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
|
||||
check() {
|
||||
mkdir -p "$DAYZ_FILES"
|
||||
|
||||
if ! mount | grep -i "$DAYZ_FILES" >/dev/null ; then
|
||||
msg "$DAYZ_FILES is not mounted!"
|
||||
echo "hint: mount -t drvfs //truenas.home.weaver/dayz $DAYZ_FILES"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
for storage_folder in "$SERVER_STORAGE" "$SERVER_STORAGE/Profilesfolder" "$SERVER_STORAGE/storage_1" ; do
|
||||
if [ ! -d "$storage_folder" ] ; then
|
||||
die "FOLDER '$storage_folder' DOES NOT EXIST"
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
# -*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
|
||||
# Environment Setup
|
||||
# -*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
|
||||
init() {
|
||||
mkdir -p "$SERVER_HOME" "$MOD_CACHE/$MAP_FOLDER_NAME"
|
||||
}
|
||||
|
||||
setup_environment() {
|
||||
msg "Copying stock server data"
|
||||
|
||||
# list of all stock folders
|
||||
for folder in addons battleye bliss docs dta keys ; do
|
||||
do_sync "$STOCK_SERVER_DATA/$folder"/ "$SERVER_HOME/$folder" || die "Failed to copy stock: $folder"
|
||||
done
|
||||
|
||||
# list of all stock files
|
||||
for file in ban.txt dayz.gproj dayzsettings.xml serverDZ.cfg whitelist.txt ; do
|
||||
do_sync "$STOCK_SERVER_DATA/$file"/ "$SERVER_HOME/$file" || die "Failed to copy stock: $file"
|
||||
done
|
||||
|
||||
# @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
|
||||
# NOTE: TODO: Namalsk etc will need this changed!@@!@!@!@!@
|
||||
# @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
|
||||
msg "Copying stock mpmissions data"
|
||||
do_sync --exclude="*storage_1*" "$STOCK_SERVER_DATA/mpmissions/dayzOffline.enoch"/ "$SERVER_HOME/mpmissions/dayzOffline.enoch"
|
||||
do_sync --exclude="*storage_1*" "$STOCK_SERVER_DATA/mpmissions/dayzOffline.chernarusplus"/ "$SERVER_HOME/mpmissions/dayzOffline.chernarusplus"
|
||||
# @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
|
||||
|
||||
msg "Copying mod files"
|
||||
do_sync "$DAYZ_FILES/mods/$MAP_FOLDER_NAME"/ "$MOD_CACHE/$MAP_FOLDER_NAME" || die "Failed to copy mod files"
|
||||
|
||||
if [ ! -f "$SERVER_HOME/DZSALModServer.exe" ] ; then
|
||||
msg "Copying DZSA executable"
|
||||
do_secure_sync "$DAYZ_FILES/software/DZSALModServer.exe" "$SERVER_HOME/DZSALModServer.exe"
|
||||
fi
|
||||
}
|
||||
|
||||
# -*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
|
||||
# Load Mods
|
||||
# -*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
|
||||
load_mods() {
|
||||
if [ ! -f "$MOD_CACHE/$MAP_FOLDER_NAME/mods.txt" ] ; then
|
||||
die "mods.txt list missing"
|
||||
fi
|
||||
|
||||
mkdir -p "$SERVER_HOME/mods"
|
||||
|
||||
modstring=""
|
||||
while read -r mod ; do
|
||||
case $mod in
|
||||
'@'*)
|
||||
msg "- Found mod: $mod"
|
||||
modstring="$modstring;mods/$mod"
|
||||
do_sync "$MOD_CACHE/$MAP_FOLDER_NAME/$mod"/ "$SERVER_HOME/mods/$mod"
|
||||
|
||||
for addon_folder in addons Addons addon Addon ; do
|
||||
if [ -d "$SERVER_HOME/mods/$mod/$addon_folder" ] ; then
|
||||
for addon in "$SERVER_HOME/mods/$mod/$addon_folder"/* ; do
|
||||
if [ ! -f "$SERVER_HOME/addons/${addon##*/}" ] ; then
|
||||
do_sync "$addon" "$SERVER_HOME/addons/${addon##*/}"
|
||||
fi
|
||||
done
|
||||
fi
|
||||
done
|
||||
|
||||
for key_folder in keys Keys key Key ; do
|
||||
if [ -d "$SERVER_HOME/mods/$mod/$key_folder" ] ; then
|
||||
for key in "$SERVER_HOME/mods/$mod/$key_folder"/* ; do
|
||||
if [ ! -f "$SERVER_HOME/keys/${key##*/}" ] ; then
|
||||
do_sync "$key" "$SERVER_HOME/keys/${key##*/}"
|
||||
fi
|
||||
done
|
||||
fi
|
||||
done
|
||||
esac
|
||||
done < "$MOD_CACHE/$MAP_FOLDER_NAME/mods.txt"
|
||||
|
||||
# trim the initial leading ';'
|
||||
modstring=${modstring#;}
|
||||
printf '%s\n' "$modstring"
|
||||
}
|
||||
|
||||
# -*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
|
||||
# Main
|
||||
# -*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
|
||||
main() {
|
||||
init
|
||||
cd "$SERVER_HOME" || die "Could not cd to '$SERVER_HOME'"
|
||||
|
||||
check || die "Failed check"
|
||||
|
||||
msg "Setting up environment"
|
||||
setup_environment || die "Could not set up environment."
|
||||
|
||||
msg "Loading mods"
|
||||
mod_string=$(load_mods)
|
||||
|
||||
>&2 printf 'MOD_STRING: %s\n' "$mod_string"
|
||||
|
||||
echo '===================================='
|
||||
printf '%s - Server started.\n' "$(date)"
|
||||
echo '===================================='
|
||||
|
||||
cmd.exe /C start "DayZ Server" /min "DZSALModServer.exe" \
|
||||
-config="$SERVER_CONFIG_FILE" \
|
||||
-port="$SERVER_PORT" \
|
||||
-profiles=Profilesfolder \
|
||||
-mod="$mod_string" \
|
||||
-cpuCount="$SERVER_CPU" \
|
||||
-dologs -adminlog \
|
||||
-netlog -freezecheck
|
||||
|
||||
msg "Sleeping for: $RESTART_INTERVAL"
|
||||
sleep "$RESTART_INTERVAL"
|
||||
count=0
|
||||
while [ "$count" -lt "$RESTART_INTERVAL" ] ; do
|
||||
sleep 60
|
||||
count=$((count + 60))
|
||||
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
|
||||
|
||||
msg "Sleeping 10 seconds to settle"
|
||||
sleep 10
|
||||
msg "SERVER IS RESTARTING"
|
||||
}
|
||||
|
||||
while : ; do
|
||||
main "$@"
|
||||
done
|
||||
Reference in New Issue
Block a user