gameservergame-servergame-servershacktoberfestdedicated-game-serversgamelinuxgsmserverbashgaminglinuxmultiplayer-game-servershell
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
363 lines
6.1 KiB
363 lines
6.1 KiB
#!/bin/bash
|
|
# ARMA 3
|
|
# Server Management Script
|
|
# Author: Daniel Gibbs
|
|
# Contributor: Scarsz
|
|
# Website: http://danielgibbs.co.uk
|
|
# Version: 011214
|
|
|
|
#### Variables ####
|
|
|
|
# Notification Email
|
|
# (on|off)
|
|
emailnotification="off"
|
|
email="[email protected]"
|
|
|
|
# Steam login
|
|
steamuser="username"
|
|
steampass="password"
|
|
|
|
# Server IP
|
|
ip="0.0.0.0"
|
|
|
|
fn_parms(){
|
|
parms="-netlog -port=${serverport} -ip=${ip} -config=${servercfg}"
|
|
}
|
|
|
|
#### Advanced Variables ####
|
|
|
|
# Steam
|
|
appid="233780"
|
|
|
|
# Server Details
|
|
servicename="arma3-server"
|
|
gamename="ARMA 3"
|
|
engine="realvirtuality"
|
|
|
|
# Directories
|
|
rootdir="$(cd "$(dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
|
selfname="$0"
|
|
lockselfname=$(echo ".${servicename}.lock")
|
|
filesdir="${rootdir}/serverfiles"
|
|
systemdir="${filesdir}"
|
|
executabledir="${filesdir}"
|
|
executable="./arma3server"
|
|
servercfgdir="${systemdir}"
|
|
servercfg="${servicename}.cfg"
|
|
servercfgfullpath="${servercfgdir}/${servercfg}"
|
|
backupdir="backups"
|
|
|
|
# Server Details
|
|
servername=$(grep -s hostname "${servercfgfullpath}"|sed -e 's/\<hostname\>//g'| tr -d '=\"; ')
|
|
serverport=$(sed -n -e '10 p' ${servercfgfullpath} 2>/dev/null| sed 's/[\/\; ]//g' | tr -cd [:digit:])
|
|
queryport=$(sed -n -e '14 p' ${servercfgfullpath} 2>/dev/null| sed 's/[\/\; ]//g' | tr -cd [:digit:])
|
|
masterport=$(sed -n -e '12 p' ${servercfgfullpath} 2>/dev/null| sed 's/[\/\; ]//g' | tr -cd [:digit:])
|
|
|
|
# Logging
|
|
logdays="7"
|
|
#gamelogdir="" # No server logs available
|
|
scriptlogdir="${rootdir}/log/script"
|
|
consolelogdir="${rootdir}/log/console"
|
|
|
|
scriptlog="${scriptlogdir}/${servicename}-script.log"
|
|
consolelog="${consolelogdir}/${servicename}-console.log"
|
|
emaillog="${scriptlogdir}/${servicename}-email.log"
|
|
|
|
scriptlogdate="${scriptlogdir}/${servicename}-script-$(date '+%d-%m-%Y-%H-%M-%S').log"
|
|
consolelogdate="${consolelogdir}/${servicename}-console-$(date '+%d-%m-%Y-%H-%M-%S').log"
|
|
|
|
##### Script #####
|
|
# Do not edit
|
|
# unless you know
|
|
# what you are doing
|
|
|
|
fn_scriptlog(){
|
|
echo -e "$(date '+%b %d %H:%M:%S') ${servicename}: ${1}" >> "${scriptlog}"
|
|
}
|
|
|
|
# [ FAIL ]
|
|
fn_printfail(){
|
|
echo -en "\r\033[K[\e[0;31m FAIL \e[0;39m] $@"
|
|
}
|
|
|
|
fn_printfailnl(){
|
|
echo -e "\r\033[K[\e[0;31m FAIL \e[0;39m] $@"
|
|
}
|
|
|
|
# [ OK ]
|
|
fn_printok(){
|
|
echo -en "\r\033[K[\e[0;32m OK \e[0;39m] $@"
|
|
}
|
|
|
|
fn_printoknl(){
|
|
echo -e "\r\033[K[\e[0;32m OK \e[0;39m] $@"
|
|
}
|
|
|
|
# [ INFO ]
|
|
fn_printinfo(){
|
|
echo -en "\r\033[K[\e[0;36m INFO \e[0;39m] $@"
|
|
}
|
|
|
|
fn_printinfonl(){
|
|
echo -e "\r\033[K[\e[0;36m INFO \e[0;39m] $@"
|
|
}
|
|
|
|
# [ WARN ]
|
|
fn_printwarn(){
|
|
echo -en "\r\033[K[\e[1;33m WARN \e[0;39m] $@"
|
|
}
|
|
|
|
fn_printwarnnl(){
|
|
echo -e "\r\033[K[\e[1;33m WARN \e[0;39m] $@"
|
|
}
|
|
|
|
# [ .... ]
|
|
fn_printdots(){
|
|
echo -en "\r\033[K[ .... ] $@"
|
|
}
|
|
|
|
fn_rootcheck(){
|
|
functionfile="${FUNCNAME}"
|
|
fn_runfunction
|
|
}
|
|
|
|
fn_syscheck(){
|
|
if [ ! -e "${systemdir}" ]; then
|
|
fn_printfailnl "Cannot access ${systemdir}: No such directory"
|
|
exit
|
|
fi
|
|
}
|
|
|
|
fn_autoip(){
|
|
functionfile="${FUNCNAME}"
|
|
fn_runfunction
|
|
}
|
|
|
|
fn_logmanager(){
|
|
functionfile="${FUNCNAME}"
|
|
fn_runfunction
|
|
}
|
|
|
|
fn_debugserver(){
|
|
functionfile="${FUNCNAME}"
|
|
fn_runfunction
|
|
}
|
|
|
|
fn_console(){
|
|
functionfile="${FUNCNAME}"
|
|
fn_runfunction
|
|
}
|
|
|
|
fn_backupserver(){
|
|
functionfile="${FUNCNAME}"
|
|
fn_runfunction
|
|
}
|
|
|
|
fn_distro(){
|
|
functionfile="${FUNCNAME}"
|
|
fn_runfunction
|
|
}
|
|
|
|
fn_uptime(){
|
|
functionfile="${FUNCNAME}"
|
|
fn_runfunction
|
|
}
|
|
|
|
fn_load(){
|
|
functionfile="${FUNCNAME}"
|
|
fn_runfunction
|
|
}
|
|
|
|
fn_emailnotification(){
|
|
functionfile="${FUNCNAME}"
|
|
fn_runfunction
|
|
}
|
|
|
|
fn_emailtest(){
|
|
functionfile="${FUNCNAME}"
|
|
fn_runfunction
|
|
}
|
|
|
|
fn_serverquery(){
|
|
functionfile="${FUNCNAME}"
|
|
fn_runfunction
|
|
}
|
|
|
|
fn_monitorserver(){
|
|
functionfile="${FUNCNAME}"
|
|
fn_runfunction
|
|
}
|
|
|
|
fn_updateserver(){
|
|
functionfile="${FUNCNAME}"
|
|
fn_runfunction
|
|
}
|
|
|
|
fn_validateserver(){
|
|
functionfile="${FUNCNAME}"
|
|
fn_runfunction
|
|
}
|
|
|
|
fn_restartserver(){
|
|
fn_scriptlog "Restarting ${servername}"
|
|
fn_stopserver
|
|
fn_startserver
|
|
}
|
|
|
|
fn_stopserver(){
|
|
functionfile="${FUNCNAME}"
|
|
fn_runfunction
|
|
}
|
|
|
|
fn_startserver(){
|
|
functionfile="${FUNCNAME}"
|
|
fn_runfunction
|
|
}
|
|
|
|
fn_details(){
|
|
functionfile="${FUNCNAME}"
|
|
fn_runfunction
|
|
}
|
|
|
|
fn_runfunction(){
|
|
# Download function if missing
|
|
if [ ! -f "${rootdir}/functions/${functionfile}" ]; then
|
|
cd "${rootdir}"
|
|
if [ ! -d "functions" ]; then
|
|
mkdir functions
|
|
fi
|
|
echo "loading ${functionfile}..."
|
|
cd functions
|
|
wget --no-check-certificate -nv -N https://raw.githubusercontent.com/dgibbs64/linuxgameservers/master/functions/${functionfile}
|
|
chmod +x "${functionfile}"
|
|
cd "${rootdir}"
|
|
sleep 1
|
|
echo ""
|
|
fi
|
|
# Run function
|
|
source "${rootdir}/functions/${functionfile}"
|
|
}
|
|
|
|
#
|
|
## Installer
|
|
#
|
|
|
|
fn_glibcfix(){
|
|
functionfile="${FUNCNAME}"
|
|
fn_runfunction
|
|
}
|
|
|
|
fn_header(){
|
|
functionfile="${FUNCNAME}"
|
|
fn_runfunction
|
|
}
|
|
|
|
fn_steamdl(){
|
|
functionfile="${FUNCNAME}"
|
|
fn_runfunction
|
|
}
|
|
|
|
fn_steaminstall(){
|
|
functionfile="${FUNCNAME}"
|
|
fn_runfunction
|
|
}
|
|
|
|
fn_steamfix(){
|
|
functionfile="${FUNCNAME}"
|
|
fn_runfunction
|
|
}
|
|
|
|
fn_loginstall(){
|
|
functionfile="${FUNCNAME}"
|
|
fn_runfunction
|
|
}
|
|
|
|
fn_getquery(){
|
|
functionfile="${FUNCNAME}"
|
|
fn_runfunction
|
|
}
|
|
|
|
fn_retryinstall(){
|
|
functionfile="${FUNCNAME}"
|
|
fn_runfunction
|
|
}
|
|
|
|
fn_serverdirectory(){
|
|
functionfile="${FUNCNAME}"
|
|
fn_runfunction
|
|
}
|
|
|
|
fn_serverconfig(){
|
|
functionfile="${FUNCNAME}"
|
|
fn_runfunction
|
|
}
|
|
|
|
fn_install(){
|
|
fn_rootcheck
|
|
fn_header
|
|
if [ -z "${autoinstall}" ]; then
|
|
fn_serverdirectory
|
|
fn_header
|
|
fi
|
|
fn_steamdl
|
|
fn_steaminstall
|
|
fn_steamfix
|
|
fn_glibcfix
|
|
fn_loginstall
|
|
fn_getquery
|
|
fn_serverconfig
|
|
fn_header
|
|
fn_details
|
|
echo "================================="
|
|
echo "Install Complete!"
|
|
echo ""
|
|
echo "To start server type:"
|
|
echo "${selfname} start"
|
|
echo ""
|
|
}
|
|
|
|
fn_autoinstall(){
|
|
autoinstall=1
|
|
fn_install
|
|
}
|
|
|
|
case "$1" in
|
|
start)
|
|
fn_startserver;;
|
|
stop)
|
|
fn_stopserver;;
|
|
restart)
|
|
fn_restartserver;;
|
|
update)
|
|
fn_updateserver;;
|
|
update-restart)
|
|
fn_stopserver
|
|
fn_updateserver
|
|
fn_startserver;;
|
|
validate)
|
|
fn_validateserver;;
|
|
validate-restart)
|
|
fn_stopserver
|
|
fn_validateserver
|
|
fn_startserver;;
|
|
monitor)
|
|
fn_monitorserver;;
|
|
email-test)
|
|
fn_emailtest;;
|
|
details)
|
|
fn_details;;
|
|
backup)
|
|
fn_backupserver;;
|
|
console)
|
|
fn_console;;
|
|
debug)
|
|
fn_debugserver;;
|
|
install)
|
|
fn_install;;
|
|
auto-install)
|
|
fn_autoinstall;;
|
|
*)
|
|
echo "Usage: $0 {start|stop|restart|update|update-restart|validate|validate-restart|monitor|email-test|details|backup|console|debug|install|auto-install}"
|
|
exit 1;;
|
|
esac
|
|
exit
|