Browse Source

Merge 18fcd3157f into 5780829dfe

pull/63/merge
wrelam 11 years ago
parent
commit
f79dcf8a43
  1. 134
      CounterStrikeGlobalOffensive/csgoserver

134
CounterStrikeGlobalOffensive/csgoserver

@ -33,11 +33,25 @@ port="27015"
sourcetvport="27020" sourcetvport="27020"
clientport="27005" clientport="27005"
ip="0.0.0.0" ip="0.0.0.0"
tickrate="64"
# https://developer.valvesoftware.com/wiki/Command_Line_Options#Source_Dedicated_Server # https://developer.valvesoftware.com/wiki/Command_Line_Options#Source_Dedicated_Server
# https://developer.valvesoftware.com/wiki/Counter-Strike:_Global_Offensive_Dedicated_Servers#Starting_the_Server # https://developer.valvesoftware.com/wiki/Counter-Strike:_Global_Offensive_Dedicated_Servers#Starting_the_Server
fn_parms(){ fn_parms(){
parms="-game csgo -usercon +map ${defaultmap} +mapgroup ${mapgroup} +game_mode ${gamemode} +game_type ${gametype} -strictportbind -ip ${ip} -port ${port} +clientport ${clientport} +tv_port ${sourcetvport} -maxplayers ${maxplayers} +servercfgfile ${servercfg}" parms="-game csgo "
parms+="-usercon "
parms+="+map ${defaultmap} "
parms+="+mapgroup ${mapgroup} "
parms+="+game_mode ${gamemode} "
parms+="+game_type ${gametype} "
parms+="-strictportbind "
parms+="-ip ${ip} "
parms+="-port ${port} "
parms+="+clientport ${clientport} "
parms+="+tv_port ${sourcetvport} "
parms+="-maxplayers ${maxplayers} "
parms+="+servercfgfile ${servercfg}"
parms+="-tickrate ${tickrate}"
} }
#### Advanced Variables #### #### Advanced Variables ####
@ -81,6 +95,49 @@ emaillog="${scriptlogdir}/${servicename}-email.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"
# Print functions
# [ FAIL ]
print_fail_nonl()
{
echo -en "\r\033[K[\e[0;31m FAIL \e[0;39m] $@"
}
print_fail()
{
print_fail_nonl $@
echo -en "\n"
}
# [ OK ]
print_ok_nonl()
{
echo -e "\r\033[K[\e[0;32m OK \e[0;39m] $@"
}
print_ok()
{
print_ok_nonl $@
echo -en "\n"
}
# [ INFO ]
print_info_nonl()
{
echo -e "\r\033[K[\e[0;36m INFO \e[0;39m] $@"
}
print_info()
{
print_info_nonl $@
echo -en "\n"
}
# [ .... ]
print_dots()
{
echo -en "\r\033[K[ .... ] $@"
}
##### Script ##### ##### Script #####
# Do not edit # Do not edit
# unless you know # unless you know
@ -92,14 +149,14 @@ fn_scriptlog(){
fn_rootcheck(){ fn_rootcheck(){
if [ `whoami` = "root" ]; then if [ `whoami` = "root" ]; then
echo -e "\r\033[K[\e[0;31m FAIL \e[0;39m] Script will not run as root!" print_fail "Script will not run as root!"
exit exit
fi fi
} }
fn_syscheck(){ fn_syscheck(){
if [ ! -e "${systemdir}" ]; then if [ ! -e "${systemdir}" ]; then
echo -e "\r\033[K[\e[0;31m FAIL \e[0;39m] Cannot access ${systemdir}: No such directory" print_fail "Cannot access ${systemdir}: No such directory"
exit exit
fi fi
} }
@ -128,10 +185,10 @@ if [ ! -e "${consolelog}" ]; then
fi fi
# log manager will active if finds logs older than ${logdays} # log manager will active if finds logs older than ${logdays}
if [ `find "${scriptlogdir}"/* -mtime +${logdays}|wc -l` -ne "0" ]; then if [ `find "${scriptlogdir}"/* -mtime +${logdays}|wc -l` -ne "0" ]; then
echo -e "\r\033[K[\e[0;32m OK \e[0;39m] Starting log cleaner" print_ok "Starting log cleaner"
fn_scriptlog "Starting log cleaner" fn_scriptlog "Starting log cleaner"
sleep 1 sleep 1
echo -e "[\e[0;36m INFO \e[0;39m] Removing logs older than ${logdays} days" print_info "Removing logs older than ${logdays} days"
fn_scriptlog "Removing logs older than ${logdays} days" fn_scriptlog "Removing logs older than ${logdays} days"
sleep 1 sleep 1
find "${scriptlogdir}"/* -mtime +${logdays}|tee >> "${scriptlog}" find "${scriptlogdir}"/* -mtime +${logdays}|tee >> "${scriptlog}"
@ -141,7 +198,7 @@ if [ `find "${scriptlogdir}"/* -mtime +${logdays}|wc -l` -ne "0" ]; then
count=$((${scriptcount} + ${consolecount})) count=$((${scriptcount} + ${consolecount}))
find "${scriptlogdir}"/* -mtime +${logdays} -exec rm {} \; find "${scriptlogdir}"/* -mtime +${logdays} -exec rm {} \;
find "${consolelogdir}"/* -mtime +${logdays} -exec rm {} \; find "${consolelogdir}"/* -mtime +${logdays} -exec rm {} \;
echo -e "[\e[0;36m INFO \e[0;39m] Log cleaner removed ${count} log files" print_info "Log cleaner removed ${count} log files"
fn_scriptlog "Log cleaner removed ${count} log files" fn_scriptlog "Log cleaner removed ${count} log files"
fi fi
} }
@ -171,9 +228,9 @@ while true; do
esac esac
done done
fn_stopserver fn_stopserver
echo -en "\r\033[K[ .... ] Starting debug mode ${servicename}: ${servername}" print_dots "Starting debug mode ${servicename}: ${servername}"
sleep 0.5 sleep 0.5
echo -en "\r\033[K[\e[0;32m OK \e[0;39m] Starting debug mode ${servicename}: ${servername}" print_ok_nonl "Starting debug mode ${servicename}: ${servername}"
fn_scriptlog "Started debug mode ${servername}" fn_scriptlog "Started debug mode ${servername}"
sleep 0.5 sleep 0.5
echo -en "\n" echo -en "\n"
@ -199,16 +256,16 @@ while true; do
* ) echo "Please answer yes or no.";; * ) echo "Please answer yes or no.";;
esac esac
done done
echo -en "\r\033[K[ .... ] Starting ${servicename} console" print_dots "Starting ${servicename} console"
sleep 0.5 sleep 0.5
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
echo -e "\r\033[K[\e[0;32m OK \e[0;39m] Starting ${servicename} console" print_ok "Starting ${servicename} console"
fn_scriptlog "Console accessed" fn_scriptlog "Console accessed"
sleep 1 sleep 1
tmux attach-session -t ${servicename} tmux attach-session -t ${servicename}
else else
echo -e "\r\033[K[\e[0;31m FAIL \e[0;39m] Starting ${servicename} console: ${servername} not running" print_fail "Starting ${servicename} console: ${servername} not running"
sleep 0.5 sleep 0.5
while true; do while true; do
read -p "Do you want to start the server? [y/N]" yn read -p "Do you want to start the server? [y/N]" yn
@ -253,9 +310,9 @@ if [ ${tmuxwc} -eq 1 ]; then
esac esac
done done
fi fi
echo -en "\r\033[K[ .... ] Starting backup ${servicename}: ${servername}" print_dots "Starting backup ${servicename}: ${servername}"
sleep 1 sleep 1
echo -en "\r\033[K[\e[0;32m OK \e[0;39m] Starting backup ${servicename}: ${servername}" print_ok_nonl "Starting backup ${servicename}: ${servername}"
fn_scriptlog "Backup started" fn_scriptlog "Backup started"
sleep 1 sleep 1
echo -en "\n" echo -en "\n"
@ -324,7 +381,7 @@ if [ ! -z "${gamelogdir}" ]; then
tail "${gamelogdir}"/*|grep -v "==>"|sed '/^$/d'|tail -25 >> "${emaillog}" tail "${gamelogdir}"/*|grep -v "==>"|sed '/^$/d'|tail -25 >> "${emaillog}"
fi fi
mail -s "${subject}" ${email} < "${emaillog}" mail -s "${subject}" ${email} < "${emaillog}"
echo -en "[\e[0;36m INFO \e[0;39m] Sent email notification to ${email}" print_info_nonl "Sent email notification to ${email}"
fn_scriptlog "Sent email notification to ${email}" fn_scriptlog "Sent email notification to ${email}"
sleep 1 sleep 1
echo -en "\n" echo -en "\n"
@ -340,7 +397,7 @@ if [ "${emailnotification}" = "on" ]; then
actiontaken="Sent test email...hello is this thing on?" actiontaken="Sent test email...hello is this thing on?"
fn_emailnotification fn_emailnotification
else else
echo -e "\r\033[K[\e[0;31m FAIL \e[0;39m] Email notification not enabled" print_fail "Email notification not enabled"
fn_scriptlog "Email notification not enabled" fn_scriptlog "Email notification not enabled"
fi fi
sleep 0.5 sleep 0.5
@ -357,21 +414,21 @@ if [ -f gsquery.py ]; then
elif [ "${engine}" == "spark" ]; then elif [ "${engine}" == "spark" ]; then
port=$((${port} + 1)) port=$((${port} + 1))
fi fi
echo -en "\r\033[K[\e[0;36m INFO \e[0;39m] Monitoring ${servicename}: Detected gsquery.py" print_info_nonl "Monitoring ${servicename}: Detected gsquery.py"
fn_scriptlog "Detected gsquery.py" fn_scriptlog "Detected gsquery.py"
sleep 1 sleep 1
echo -en "\r\033[K[ .... ] Monitoring ${servicename}: Querying port: ${ip}:${port}: QUERYING" print_dots "Monitoring ${servicename}: Querying port: ${ip}:${port}: QUERYING"
fn_scriptlog "Querying port: ${ip}:${port}: QUERYING" fn_scriptlog "Querying port: ${ip}:${port}: QUERYING"
serverquery=$(./gsquery.py -a ${ip} -p ${port} -e ${engine} 2>&1) serverquery=$(./gsquery.py -a ${ip} -p ${port} -e ${engine} 2>&1)
exitcode=$? exitcode=$?
sleep 1 sleep 1
if [ "${exitcode}" == "1" ]||[ "${exitcode}" == "2" ]||[ "${exitcode}" == "3" ]||[ "${exitcode}" == "4" ]; then if [ "${exitcode}" == "1" ]||[ "${exitcode}" == "2" ]||[ "${exitcode}" == "3" ]||[ "${exitcode}" == "4" ]; then
echo -en "\r\033[K[\e[0;31m FAIL \e[0;39m] Monitoring ${servicename}: Querying port: ${ip}:${port}: ${serverquery}" print_fail_nonl "Monitoring ${servicename}: Querying port: ${ip}:${port}: ${serverquery}"
fn_scriptlog "Querying port: ${ip}:${port}: ${serverquery}" fn_scriptlog "Querying port: ${ip}:${port}: ${serverquery}"
sleep 1 sleep 1
echo -en "\n" echo -en "\n"
if [[ -z "${secondquery}" ]]; then if [[ -z "${secondquery}" ]]; then
echo -en "\r\033[K[\e[0;36m INFO \e[0;39m] Monitoring ${servicename}: Waiting 30 seconds to re-query" print_info_nonl "Monitoring ${servicename}: Waiting 30 seconds to re-query"
fn_scriptlog "Waiting 30 seconds to re-query" fn_scriptlog "Waiting 30 seconds to re-query"
sleep 30 sleep 30
secondquery=1 secondquery=1
@ -386,13 +443,13 @@ if [ -f gsquery.py ]; then
fn_restartserver fn_restartserver
exit exit
elif [ "${exitcode}" == "0" ]; then elif [ "${exitcode}" == "0" ]; then
echo -en "\r\033[K[\e[0;32m OK \e[0;39m] Monitoring ${servicename}: Querying port: ${ip}:${port}: OK" print_ok_nonl "Monitoring ${servicename}: Querying port: ${ip}:${port}: OK"
fn_scriptlog "Querying port: ${ip}:${port}: OK" fn_scriptlog "Querying port: ${ip}:${port}: OK"
sleep 1 sleep 1
echo -en "\n" echo -en "\n"
exit exit
elif [ "${exitcode}" == "126" ]; then elif [ "${exitcode}" == "126" ]; then
echo -en "\r\033[K[\e[0;31m FAIL \e[0;39m] Monitoring ${servicename}: Querying port: ${ip}:${port}: ERROR: ./gsquery.py: Permission denied" print_fail_nonl "Monitoring ${servicename}: Querying port: ${ip}:${port}: ERROR: ./gsquery.py: Permission denied"
fn_scriptlog "Querying port: ${ip}:${port}: ./gsquery.py: Permission denied" fn_scriptlog "Querying port: ${ip}:${port}: ./gsquery.py: Permission denied"
sleep 1 sleep 1
echo -en "\n" echo -en "\n"
@ -410,7 +467,7 @@ if [ -f gsquery.py ]; then
exit exit
fi fi
else else
echo -en "\r\033[K[\e[0;31m FAIL \e[0;39m] Monitoring ${servicename}: Querying port: ${ip}:${port}: UNKNOWN ERROR" print_fail_nonl "Monitoring ${servicename}: Querying port: ${ip}:${port}: UNKNOWN ERROR"
fn_scriptlog "Querying port: ${ip}:${port}: UNKNOWN ERROR" fn_scriptlog "Querying port: ${ip}:${port}: UNKNOWN ERROR"
sleep 1 sleep 1
echo -en "\n" echo -en "\n"
@ -424,24 +481,24 @@ fn_monitorserver(){
fn_rootcheck fn_rootcheck
fn_syscheck fn_syscheck
fn_autoip fn_autoip
echo -en "\r\033[K[ .... ] Monitoring ${servicename}: ${servername}" print_dots "Monitoring ${servicename}: ${servername}"
fn_scriptlog "Monitoring ${servername}" fn_scriptlog "Monitoring ${servername}"
sleep 1 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
echo -en "\r\033[K[ .... ] Monitoring ${servicename}: Checking session: CHECKING" print_dots "Monitoring ${servicename}: Checking session: CHECKING"
fn_scriptlog "Checking session: CHECKING" fn_scriptlog "Checking session: CHECKING"
sleep 1 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
echo -en "\r\033[K[\e[0;32m OK \e[0;39m] Monitoring ${servicename}: Checking session: OK" print_ok_nonl "Monitoring ${servicename}: Checking session: OK"
fn_scriptlog "Checking session: OK" fn_scriptlog "Checking session: OK"
sleep 1 sleep 1
echo -en "\n" echo -en "\n"
fn_serverquery fn_serverquery
exit exit
else else
echo -en "\r\033[K[\e[0;31m FAIL \e[0;39m] Monitoring ${servicename}: Checking session: FAIL" print_fail_nonl "Monitoring ${servicename}: Checking session: FAIL"
fn_scriptlog "Checking session: FAIL" fn_scriptlog "Checking session: FAIL"
sleep 1 sleep 1
echo -en "\n" echo -en "\n"
@ -455,10 +512,10 @@ if [ "${updatecheck}" = "0" ]; then
fn_startserver fn_startserver
fi fi
else else
echo -e "[\e[0;36m INFO \e[0;39m] Monitoring ${servicename}: Detected SteamCMD is checking for updates" print_info "Monitoring ${servicename}: Detected SteamCMD is checking for updates"
fn_scriptlog "Detected SteamCMD is checking for updates" fn_scriptlog "Detected SteamCMD is checking for updates"
sleep 1 sleep 1
echo -e "[\e[0;36m INFO \e[0;39m] Monitoring ${servicename}: When updates complete ${servicename} will start" print_info "Monitoring ${servicename}: When updates complete ${servicename} will start"
fn_scriptlog "When updates complete ${servicename} will start" fn_scriptlog "When updates complete ${servicename} will start"
fi fi
} }
@ -466,9 +523,9 @@ fi
fn_updateserver(){ fn_updateserver(){
fn_rootcheck fn_rootcheck
fn_syscheck fn_syscheck
echo -en "\r\033[K[ .... ] Updating ${servicename}: ${servername}" print_dots "Updating ${servicename}: ${servername}"
sleep 0.5 sleep 0.5
echo -en "\r\033[K[\e[0;32m OK \e[0;39m] Updating ${servicename}: ${servername}" print_ok_nonl "Updating ${servicename}: ${servername}"
fn_scriptlog "Updating ${servername}" fn_scriptlog "Updating ${servername}"
cd "${rootdir}" cd "${rootdir}"
cd "steamcmd" cd "steamcmd"
@ -485,15 +542,15 @@ fn_stopserver(){
fn_rootcheck 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)
echo -en "\r\033[K[ .... ] Stopping ${servicename}: ${servername}" print_dots "Stopping ${servicename}: ${servername}"
fn_scriptlog "Stopping ${servername}" fn_scriptlog "Stopping ${servername}"
sleep 0.5 sleep 0.5
if [ "${pid}" == "0" ]; then if [ "${pid}" == "0" ]; then
echo -en "\r\033[K[\e[0;31m FAIL \e[0;39m] Stopping ${servicename}: ${servername} is already stopped" print_fail_nonl "Stopping ${servicename}: ${servername} is already stopped"
fn_scriptlog "${servername} is already stopped" fn_scriptlog "${servername} is already stopped"
else else
tmux kill-session -t ${servicename} tmux kill-session -t ${servicename}
echo -en "\r\033[K[\e[0;32m OK \e[0;39m] Stopping ${servicename}: ${servername}" print_ok_nonl "Stopping ${servicename}: ${servername}"
fn_scriptlog "Stopped ${servername}" fn_scriptlog "Stopped ${servername}"
fi fi
sleep 0.5 sleep 0.5
@ -511,11 +568,11 @@ if [ ${tmuxwc} -eq 0 ]; then
mv "${scriptlog}" "${scriptlogdate}" mv "${scriptlog}" "${scriptlogdate}"
mv "${consolelog}" "${consolelogdate}" mv "${consolelog}" "${consolelogdate}"
fi fi
echo -en "\r\033[K[ .... ] Starting ${servicename}: ${servername}" print_dots "Starting ${servicename}: ${servername}"
fn_scriptlog "Starting ${servername}" fn_scriptlog "Starting ${servername}"
sleep 0.5 sleep 0.5
if [ ${tmuxwc} -eq 1 ]; then if [ ${tmuxwc} -eq 1 ]; then
echo -en "\r\033[K[\e[0;36m INFO \e[0;39m] Starting ${servicename}: ${servername} is already running" print_info_nonl "Starting ${servicename}: ${servername} is already running"
fn_scriptlog "${servername} is already running" fn_scriptlog "${servername} is already running"
sleep 0.5 sleep 0.5
echo -en "\n" echo -en "\n"
@ -526,10 +583,10 @@ tmux new-session -d -s ${servicename} "${executable} ${parms}|tee -a '${consolel
sleep 1 sleep 1
tmuxwc=$(tmux list-sessions 2>&1|awk '{print $1}'|grep -E "^${servicename}:"|wc -l) tmuxwc=$(tmux list-sessions 2>&1|awk '{print $1}'|grep -E "^${servicename}:"|wc -l)
if [ ${tmuxwc} -eq 0 ]; then if [ ${tmuxwc} -eq 0 ]; then
echo -en "\r\033[K[\e[0;31m FAIL \e[0;39m] Starting ${servicename}: Failed to start ${servername}" print_fail_nonl "Starting ${servicename}: Failed to start ${servername}"
fn_scriptlog "failed to start ${servername}" fn_scriptlog "failed to start ${servername}"
else else
echo -en "\r\033[K[\e[0;32m OK \e[0;39m] Starting ${servicename}: ${servername}" print_ok_nonl "Starting ${servicename}: ${servername}"
fn_scriptlog "Started ${servername}" fn_scriptlog "Started ${servername}"
fi fi
sleep 0.5 sleep 0.5
@ -612,6 +669,7 @@ echo "Installing ${gamename} Server"
echo "=================================" echo "================================="
sleep 1 sleep 1
mkdir -pv "${filesdir}" mkdir -pv "${filesdir}"
echo -n "730" >> ${filesdir}/steam_appid.txt
cd "${rootdir}/steamcmd" cd "${rootdir}/steamcmd"
STEAMEXE=steamcmd ./steamcmd.sh +login ${steamuser} ${steampass} +force_install_dir "${filesdir}" +app_update ${appid} validate +quit STEAMEXE=steamcmd ./steamcmd.sh +login ${steamuser} ${steampass} +force_install_dir "${filesdir}" +app_update ${appid} validate +quit
echo "" echo ""
@ -771,4 +829,4 @@ case "$1" in
echo "Usage: $0 {start|stop|restart|update|monitor|email-test|details|backup|console|debug|install}" echo "Usage: $0 {start|stop|restart|update|monitor|email-test|details|backup|console|debug|install}"
exit 1;; exit 1;;
esac esac
exit exit

Loading…
Cancel
Save