@ -3,7 +3,7 @@
# Server Management Script
# Server Management Script
# Author: Daniel Gibbs
# Author: Daniel Gibbs
# Website: http://danielgibbs.co.uk
# Website: http://danielgibbs.co.uk
# Version: 10 0914
# Version: 17 0914
#### Variables ####
#### Variables ####
@ -41,24 +41,27 @@ ip="0.0.0.0"
# Logging
# Logging
logdays="7"
logdays="7"
gamelogdir="${rootdir}/log/server"
scriptlogdir="${rootdir}/log/script"
scriptlogdir="${rootdir}/log/script"
consolelogdir="${rootdir}/log/console"
consolelogdir="${rootdir}/log/console"
gamelog="${gamelogdir}/${servicename}-game.log"
scriptlog="${scriptlogdir}/${servicename}-script.log"
scriptlog="${scriptlogdir}/${servicename}-script.log"
consolelog="${consolelogdir}/${servicename}-console.log"
consolelog="${consolelogdir}/${servicename}-console.log"
emaillog="${scriptlogdir}/${servicename}-email.log"
emaillog="${scriptlogdir}/${servicename}-email.log"
gamelogdate="${gamelogdir}/${servicename}-game-$(date '+%d-%m-%Y-%H-%M-%S').log"
scriptlogdate="${scriptlogdir}/${servicename}-script-$(date '+%d-%m-%Y-%H-%M-%S').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"
consolelogdate="${consolelogdir}/${servicename}-console-$(date '+%d-%m-%Y-%H-%M-%S').log"
# Start Variables
# Start Variables
fn_parms(){
fn_parms(){
defaultmap="KF-BioticsLab.rom"
defaultmap="KF-BioticsLab.rom"
parms="server ${defaultmap}?game=KFmod.KFGameType?VACSecured=true -nohomedir ini=${ini} log=${logfile }"
parms="server ${defaultmap}?game=KFmod.KFGameType?VACSecured=true -nohomedir ini=${ini} log=${game log}"
# Start Variables for Objective mode
# Start Variables for Objective mode
#defaultmap="KFO-Steamland"
#defaultmap="KFO-Steamland"
#parms="server ${defaultmap}?Game=KFStoryGame.KFStoryGame?VACSecured=true -nohomedir ini=${ini} log=${logfile }"
#parms="server ${defaultmap}?Game=KFStoryGame.KFStoryGame?VACSecured=true -nohomedir ini=${ini} log=${game log}"
}
}
##### Script #####
##### Script #####
@ -155,26 +158,38 @@ if [ `find "${scriptlogdir}"/* -mtime +${logdays}|wc -l` -ne "0" ]; then
fn_printdots "Starting log cleaner"
fn_printdots "Starting log cleaner"
sleep 1
sleep 1
fn_printok "Starting log cleaner"
fn_printok "Starting log cleaner"
sleep 1
fn_scriptlog "Starting log cleaner"
fn_scriptlog "Starting log cleaner"
sleep 1
sleep 1
echo -en "\n"
echo -en "\n"
fn_printinfo "Removing logs older than ${logdays} days"
fn_printinfo "Removing logs older than ${logdays} days"
sleep 1
echo -en "\n"
fn_scriptlog "Removing logs older than ${logdays} days"
fn_scriptlog "Removing logs older than ${logdays} days"
sleep 1
sleep 1
echo -en "\n"
if [ "${engine}" == "unreal2" ]; then
find "${gamelogdir}"/* -mtime +${logdays}|tee >> "${scriptlog}"
fi
find "${scriptlogdir}"/* -mtime +${logdays}|tee >> "${scriptlog}"
find "${scriptlogdir}"/* -mtime +${logdays}|tee >> "${scriptlog}"
find "${consolelogdir}"/* -mtime +${logdays}|tee >> "${scriptlog}"
find "${consolelogdir}"/* -mtime +${logdays}|tee >> "${scriptlog}"
if [ "${engine}" == "unreal2" ]; then
gamecount=$(find "${scriptlogdir}"/* -mtime +${logdays}|wc -l)
fi
scriptcount=$(find "${scriptlogdir}"/* -mtime +${logdays}|wc -l)
scriptcount=$(find "${scriptlogdir}"/* -mtime +${logdays}|wc -l)
consolecount=$(find "${consolelogdir}"/* -mtime +${logdays}|wc -l)
consolecount=$(find "${consolelogdir}"/* -mtime +${logdays}|wc -l)
count=$((${scriptcount} + ${consolecount}))
count=$((${scriptcount} + ${consolecount}))
if [ "${engine}" == "unreal2" ]; then
count=$((${scriptcount} + ${consolecount} + ${gamecount}))
else
count=$((${scriptcount} + ${consolecount}))
fi
if [ "${engine}" == "unreal2" ]; then
find "${gamelogdir}"/* -mtime +${logdays} -exec rm {} \;
fi
find "${scriptlogdir}"/* -mtime +${logdays} -exec rm {} \;
find "${scriptlogdir}"/* -mtime +${logdays} -exec rm {} \;
find "${consolelogdir}"/* -mtime +${logdays} -exec rm {} \;
find "${consolelogdir}"/* -mtime +${logdays} -exec rm {} \;
fn_printok "Log cleaner removed ${count} log files"
fn_printok "Log cleaner removed ${count} log files"
fn_scriptlog "Log cleaner removed ${count} log files"
sleep 1
sleep 1
echo -en "\n"
echo -en "\n"
fn_scriptlog "Log cleaner removed ${count} log files"
fi
fi
}
}
@ -244,8 +259,8 @@ sleep 1
tmuxwc=$(tmux list-sessions 2>&1|awk '{print $1}'|grep -v failed|grep -E "^${servicename}:"|wc -l)
tmuxwc=$(tmux list-sessions 2>&1|awk '{print $1}'|grep -v failed|grep -E "^${servicename}:"|wc -l)
if [ ${tmuxwc} -eq 1 ]; then
if [ ${tmuxwc} -eq 1 ]; then
fn_printoknl "Starting ${servicename} console"
fn_printoknl "Starting ${servicename} console"
sleep 1
fn_scriptlog "Console accessed"
fn_scriptlog "Console accessed"
sleep 1
tmux attach-session -t ${servicename}
tmux attach-session -t ${servicename}
else
else
fn_printfailnl "Starting ${servicename} console: ${servername} not running"
fn_printfailnl "Starting ${servicename} console: ${servername} not running"
@ -296,8 +311,8 @@ fi
fn_printdots "Starting backup ${servicename}: ${servername}"
fn_printdots "Starting backup ${servicename}: ${servername}"
sleep 1
sleep 1
fn_printok "Starting backup ${servicename}: ${servername}"
fn_printok "Starting backup ${servicename}: ${servername}"
sleep 1
fn_scriptlog "Backup started"
fn_scriptlog "Backup started"
sleep 1
echo -en "\n"
echo -en "\n"
cd "${rootdir}"
cd "${rootdir}"
mkdir -pv "${backupdir}" > /dev/null 2>&1
mkdir -pv "${backupdir}" > /dev/null 2>&1
@ -365,9 +380,9 @@ if [ ! -z "${gamelogdir}" ]; then
fi
fi
mail -s "${subject}" ${email} < "${emaillog}"
mail -s "${subject}" ${email} < "${emaillog}"
fn_printinfo "Sent email notification to ${email}"
fn_printinfo "Sent email notification to ${email}"
fn_scriptlog "Sent email notification to ${email}"
sleep 1
sleep 1
echo -en "\n"
echo -en "\n"
fn_scriptlog "Sent email notification to ${email}"
}
}
fn_emailtest(){
fn_emailtest(){
@ -398,11 +413,11 @@ if [ -f gsquery.py ]; then
port=$((${port} + 1))
port=$((${port} + 1))
fi
fi
fn_printinfo "Monitoring ${servicename}: Detected gsquery.py"
fn_printinfo "Monitoring ${servicename}: Detected gsquery.py"
sleep 1
fn_scriptlog "Detected gsquery.py"
fn_scriptlog "Detected gsquery.py"
fn_printdots "Monitoring ${servicename}: Querying port: ${ip}:${port}: QUERYING"
sleep 1
sleep 1
fn_printdots "Monitoring ${servicename}: Querying port: ${ip}:${port}: QUERYING"
fn_scriptlog "Querying port: ${ip}:${port}: QUERYING"
fn_scriptlog "Querying port: ${ip}:${port}: QUERYING"
sleep 1
serverquery=$(./gsquery.py -a ${ip} -p ${port} -e ${engine} 2>&1)
serverquery=$(./gsquery.py -a ${ip} -p ${port} -e ${engine} 2>&1)
exitcode=$?
exitcode=$?
if [ "${exitcode}" == "1" ]||[ "${exitcode}" == "2" ]||[ "${exitcode}" == "3" ]||[ "${exitcode}" == "4" ]; then
if [ "${exitcode}" == "1" ]||[ "${exitcode}" == "2" ]||[ "${exitcode}" == "3" ]||[ "${exitcode}" == "4" ]; then
@ -412,9 +427,8 @@ if [ -f gsquery.py ]; then
fn_scriptlog "Querying port: ${ip}:${port}: ${serverquery}"
fn_scriptlog "Querying port: ${ip}:${port}: ${serverquery}"
if [[ -z "${secondquery}" ]]; then
if [[ -z "${secondquery}" ]]; then
fn_printinfo "Monitoring ${servicename}: Waiting 30 seconds to re-query"
fn_printinfo "Monitoring ${servicename}: Waiting 30 seconds to re-query"
sleep 1
fn_scriptlog "Waiting 30 seconds to re-query"
fn_scriptlog "Waiting 30 seconds to re-query"
sleep 29
sleep 30
secondquery=1
secondquery=1
fn_serverquery
fn_serverquery
fi
fi
@ -428,14 +442,14 @@ if [ -f gsquery.py ]; then
exit
exit
elif [ "${exitcode}" == "0" ]; then
elif [ "${exitcode}" == "0" ]; then
fn_printok "Monitoring ${servicename}: Querying port: ${ip}:${port}: OK"
fn_printok "Monitoring ${servicename}: Querying port: ${ip}:${port}: OK"
sleep 1
fn_scriptlog "Querying port: ${ip}:${port}: OK"
fn_scriptlog "Querying port: ${ip}:${port}: OK"
sleep 1
echo -en "\n"
echo -en "\n"
exit
exit
elif [ "${exitcode}" == "126" ]; then
elif [ "${exitcode}" == "126" ]; then
fn_printfail "Monitoring ${servicename}: Querying port: ${ip}:${port}: ERROR: ./gsquery.py: Permission denied"
fn_printfail "Monitoring ${servicename}: Querying port: ${ip}:${port}: ERROR: ./gsquery.py: Permission denied"
sleep 1
fn_scriptlog "Querying port: ${ip}:${port}: ./gsquery.py: Permission denied"
fn_scriptlog "Querying port: ${ip}:${port}: ./gsquery.py: Permission denied"
sleep 1
echo -en "\n"
echo -en "\n"
echo "Attempting to resolve automatically"
echo "Attempting to resolve automatically"
chmod +x -v gsquery.py
chmod +x -v gsquery.py
@ -452,9 +466,9 @@ if [ -f gsquery.py ]; then
fi
fi
else
else
fn_printfail "Monitoring ${servicename}: Querying port: ${ip}:${port}: UNKNOWN ERROR"
fn_printfail "Monitoring ${servicename}: Querying port: ${ip}:${port}: UNKNOWN ERROR"
fn_scriptlog "Querying port: ${ip}:${port}: UNKNOWN ERROR"
sleep 1
sleep 1
echo -en "\n"
echo -en "\n"
fn_scriptlog "Querying port: ${ip}:${port}: UNKNOWN ERROR"
./gsquery.py -a ${ip} -p ${port} -e ${engine}
./gsquery.py -a ${ip} -p ${port} -e ${engine}
exit
exit
fi
fi
@ -465,27 +479,26 @@ fn_monitorserver(){
fn_rootcheck
fn_rootcheck
fn_syscheck
fn_syscheck
fn_autoip
fn_autoip
fn_printdots "Monitoring ${servicename}: ${servername}"
sleep 1
if [ ! -f ${lockselfname} ]; then
if [ ! -f ${lockselfname} ]; then
fn_printinfo "Monitoring ${servicename}: No lock file found: Monitor disabled"
fn_printinfo "Monitoring ${servicename}: No lock file found: Monitor disabled"
sleep 1
sleep 1
echo -en "\n"
echo -en "\n"
echo "To enable monitor run ${selfname} start"
exit
exit
fi
fi
fn_printdots "Monitoring ${servicename}: ${servername}"
fn_scriptlog "Monitoring ${servername}"
fn_scriptlog "Monitoring ${servername}"
sleep 1
updatecheck=$(ps -ef|grep "${selfname} update"|grep -v grep|wc -l)
updatecheck=$(ps -ef|grep "${selfname} update"|grep -v grep|wc -l)
if [ "${updatecheck}" = "0" ]; then
if [ "${updatecheck}" = "0" ]; then
fn_printdots "Monitoring ${servicename}: Checking session: CHECKING"
fn_printdots "Monitoring ${servicename}: Checking session: CHECKING"
sleep 1
fn_scriptlog "Checking session: CHECKING"
fn_scriptlog "Checking session: CHECKING"
sleep 1
tmuxwc=$(tmux list-sessions 2>&1|awk '{print $1}'|grep -v failed|grep -E "^${servicename}:"|wc -l)
tmuxwc=$(tmux list-sessions 2>&1|awk '{print $1}'|grep -v failed|grep -E "^${servicename}:"|wc -l)
if [ ${tmuxwc} -eq 1 ]; then
if [ ${tmuxwc} -eq 1 ]; then
fn_printok "Monitoring ${servicename}: Checking session: OK"
fn_printok "Monitoring ${servicename}: Checking session: OK"
fn_scriptlog "Checking session: OK"
sleep 1
sleep 1
echo -en "\n"
echo -en "\n"
fn_scriptlog "Checking session: OK"
fn_serverquery
fn_serverquery
exit
exit
else
else
@ -504,11 +517,11 @@ if [ "${updatecheck}" = "0" ]; then
fi
fi
else
else
fn_printinfonl "Monitoring ${servicename}: Detected SteamCMD is checking for updates"
fn_printinfonl "Monitoring ${servicename}: Detected SteamCMD is checking for updates"
sleep 1
fn_scriptlog "Detected SteamCMD is checking for updates"
fn_scriptlog "Detected SteamCMD is checking for updates"
fn_printinfonl "Monitoring ${servicename}: When updates complete ${servicename} will start"
sleep 1
sleep 1
fn_printinfonl "Monitoring ${servicename}: When updates complete ${servicename} will start"
fn_scriptlog "When updates complete ${servicename} will start"
fn_scriptlog "When updates complete ${servicename} will start"
sleep 1
fi
fi
}
}
@ -555,8 +568,8 @@ fn_rootcheck
fn_syscheck
fn_syscheck
pid=$(tmux list-sessions 2>&1|awk '{print $1}'|grep -E "^${servicename}:"|wc -l)
pid=$(tmux list-sessions 2>&1|awk '{print $1}'|grep -E "^${servicename}:"|wc -l)
fn_printdots "Stopping ${servicename}: ${servername}"
fn_printdots "Stopping ${servicename}: ${servername}"
sleep 1
fn_scriptlog "Stopping ${servername}"
fn_scriptlog "Stopping ${servername}"
sleep 1
if [ "${pid}" == "0" ]; then
if [ "${pid}" == "0" ]; then
fn_printfail "Stopping ${servicename}: ${servername} is already stopped"
fn_printfail "Stopping ${servicename}: ${servername} is already stopped"
fn_scriptlog "${servername} is already stopped"
fn_scriptlog "${servername} is already stopped"
@ -579,6 +592,9 @@ fn_parms
fn_logmanager
fn_logmanager
tmuxwc=$(tmux list-sessions 2>&1|awk '{print $1}'|grep -v failed|grep -E "^${servicename}:"|wc -l)
tmuxwc=$(tmux list-sessions 2>&1|awk '{print $1}'|grep -v failed|grep -E "^${servicename}:"|wc -l)
if [ ${tmuxwc} -eq 0 ]; then
if [ ${tmuxwc} -eq 0 ]; then
if [ "${engine}" == "unreal2" ]; then
mv "${gamelog}" "${gamelogdate}"
fi
mv "${scriptlog}" "${scriptlogdate}"
mv "${scriptlog}" "${scriptlogdate}"
mv "${consolelog}" "${consolelogdate}"
mv "${consolelog}" "${consolelogdate}"
fi
fi
@ -587,9 +603,9 @@ sleep 1
fn_scriptlog "Starting ${servername}"
fn_scriptlog "Starting ${servername}"
if [ ${tmuxwc} -eq 1 ]; then
if [ ${tmuxwc} -eq 1 ]; then
fn_printinfo "Starting ${servicename}: ${servername} is already running"
fn_printinfo "Starting ${servicename}: ${servername} is already running"
fn_scriptlog "${servername} is already running"
sleep 1
sleep 1
echo -en "\n"
echo -en "\n"
fn_scriptlog "${servername} is already running"
exit
exit
fi
fi
# Create lock file
# Create lock file