diff --git a/TeamSpeak3/ts3server b/TeamSpeak3/ts3server index 19f70fb13..c0a287ca0 100644 --- a/TeamSpeak3/ts3server +++ b/TeamSpeak3/ts3server @@ -3,8 +3,7 @@ # Server Management Script # Author: Daniel Gibbs # Website: http://danielgibbs.co.uk -# Version: 221113 - +# Version: 080214 #### Variables #### # Notification Email @@ -17,11 +16,23 @@ gamename="Teamspeak 3" servername="Teamspeak 3 Server" servicename="ts3-server" -# Directorys -rootdir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" +fn_parms(){ +parms="-game fof -strictportbind -ip ${ip} -port ${port} +clientport ${clientport} +tv_port ${sourcetvport} +map ${defaultmap} +servercfgfile ${servercfg} -maxplayers ${maxplayers}" +} + +# Directories +rootdir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +selfname="$(basename $0)" +lockselfname=".${servicename}.lock" filesdir="${rootdir}/serverfiles" -ini="${servicename}.ini" -backupdir="backups" +systemdir="${filesdir}" +executabledir="${filesdir}" +executable="./ts3server_startscript.sh" +servercfgdir="${filesdir}" +servercfg="${servicename}.ini" +servercfgfullpath="${servercfgdir}/${servercfg}" +defaultcfg="${servercfgfullpath}" # +backupdir="${rootdir}/backups" # Logging logdays="7" @@ -35,297 +46,31 @@ scriptlogdate="${scriptlogdir}/${servicename}-script-$(date '+%d-%m-%Y-%H-%M-%S' ##### Script ##### # Do not edit -# unless you know -# what you are doing - -fn_rootcheck(){ -if [ `whoami` = "root" ];then - echo -e "[\e[0;31m FAIL \e[0;39m] Script will not run as root!" - exit -fi -} - -fn_syscheck(){ -if [ ! -e ${filesdir} ];then - echo -e "[\e[0;31m FAIL \e[0;39m] Cannot access ${filesdir}: No such directory" - exit -fi -} - -fn_runcheck(){ -fn_status -if [ "$ts3status" = "Server is running" ]; then - echo -en "\r[\e[0;36m INFO \e[0;39m] ${servicename}: ${servername} is already running" - echo -e "$(date '+%b %d %H:%M:%S') ${servicename}: ${servername} is already running" >> ${scriptlog} - sleep 0.5 - echo -en "\n" - exit -fi -} - -fn_inicheck(){ -if [ ! -e ${filesdir}/${ini} ]; then - echo -e "[\e[1;33m WARN \e[0;39m] ${servicename}: ${filesdir}/${ini} is missing" - echo -e "$(date '+%b %d %H:%M:%S') ${servicename}: ${servername} ${filesdir}/${ini} is missing" >> ${scriptlog} - echo -e "[\e[0;36m INFO \e[0;39m] ${servicename}: Creating blank ${ini}" - echo -e "$(date '+%b %d %H:%M:%S') ${servicename}: Creating blank ${ini}" >> ${scriptlog} - echo -e "[\e[0;36m INFO \e[0;39m] ${ini} can remain blank by default." - touch ${filesdir}/${ini} -fi -} - -fn_distro(){ -arch=$(uname -m) -kernel=$(uname -r) -if [ -f /etc/lsb-release ]; then - os=$(lsb_release -s -d) -elif [ -f /etc/debian_version ]; then - os="Debian $(cat /etc/debian_version)" -elif [ -f /etc/redhat-release ]; then - os=$(cat /etc/redhat-release) -else - os="$(uname -s) $(uname -r)" -fi -} - -fn_uptime(){ -uptime=$(> ${scriptlog} -sleep 0.5 -echo -en "\r[\e[0;32m OK \e[0;39m] Starting ${servicename}: ${servername} backup" -echo -e "$(date '+%b %d %H:%M:%S') ${servicename}: Started ${servername} backup" >> ${scriptlog} -sleep 1 -echo -en "\n" -cd ${rootdir} -mkdir ${backupdir} > /dev/null 2>&1 -tar -cvzf ${backupdir}/${backupname}.tar.gz --exclude ${backupdir} * -echo -en "\r${servicename} backup complete" -echo -e "$(date '+%b %d %H:%M:%S') ${servicename}: backup complete" >> ${scriptlog} -} - -fn_emailnotification(){ -fn_distro -fn_uptime -fn_load -{ -echo -e "========================================\n${servicename} details\n========================================\n" -echo -e "Service: ${servicename}" -echo -e "Game: ${gamename}" -echo -e "Server: ${servername}" -echo -e "Failure reason: ${failurereason}" -echo -e "Action Taken: ${actiontaken}\n" -echo -e "========================================\nServer details\n========================================\n" -echo -e "Date: $(date)" -echo -e "Distro: ${os}" -echo -e "Arch: ${arch}" -echo -e "Kernel: ${kernel}" -echo -e "Hostname: $HOSTNAME" -echo -e "Uptime: ${days}d, ${hours}h, ${minutes}m" -echo -e "Avg Load${load}\n" -echo -e "========================================\nLogs\n========================================\n" -echo -e "Script log\n===================\n" -}|tee ${scriptlogdir}/${servicename}-email.log > /dev/null 2>&1 -tail -25 ${scriptlog} >> ${emaillog} -if [ ! -z ${consolelog} ];then - echo -e "\n\nConsole log\n====================\n" >> ${emaillog} - tail -25 ${consolelog} >> ${emaillog} -fi -if [ ! -z ${gamelogdir} ];then - echo -e "\n\nServer log\n====================\n" >> ${emaillog} - tail ${gamelogdir}/*|grep -v "==>"|sed '/^$/d'|tail -25 >> ${emaillog} -fi -mail -s "${subject}" ${email} < ${emaillog} -echo -en "[\e[0;36m INFO \e[0;39m] Sent email notification to ${email}" -echo -e "$(date '+%b %d %H:%M:%S') ${servicename}: Sent email notification to ${email}" >> ${scriptlog} -} -fn_emailtest(){ -fn_rootcheck -fn_syscheck -echo -e "$( date '+%b %d %H:%M:%S') ${servicename}: Emailing test notification" >> ${scriptlog} -if [ "${emailnotification}" = "on" ];then - subject="${servicename} Email Test Notification - Testing ${servername}" - failurereason="Testing ${servicename} email notification" - actiontaken="Sent test email...hello is this thing on?" - fn_emailnotification -else - echo -e "[\e[0;31m FAIL \e[0;39m] Email notification not enabled" - echo -e "$( date '+%b %d %H:%M:%S') ${servicename}: Email notification not enabled" >> ${scriptlog} +fn_runfunction(){ +# Functions are downloaded and run with this function +if [ ! -f "${rootdir}/functions/${functionfile}" ]; then + cd "${rootdir}" + if [ ! -d "functions" ]; then + mkdir functions + fi + cd functions + echo -e "loading ${functionfile}...\c" + wget -N --no-check-certificate /dev/null https://raw.githubusercontent.com/dgibbs64/linuxgameservers/master/functions/${functionfile} 2>&1 | grep -F HTTP | cut -c45- + chmod +x "${functionfile}" + cd "${rootdir}" + sleep 1 fi -sleep 0.5 -echo -en "\n" +source "${rootdir}/functions/${functionfile}" } -fn_logmanager(){ -#Log manager will active if finds logs older than $logdays -if [ `find ${scriptlogdir}/* -mtime +${logdays} |wc -l` -ne "0" ];then - echo -e "[\e[0;32m OK \e[0;39m] Starting log cleaner" - echo -e "$(date '+%b %d %H:%M:%S') ${servicename}: Starting log cleaner" >> ${scriptlog} - echo -e "[\e[0;36m INFO \e[0;39m] Removing logs older than ${logdays} days" - echo -e "$(date '+%b %d %H:%M:%S') ${servicename}: Removing logs older than ${logdays} days" >> ${scriptlog} - find ${scriptlogdir}/* -mtime +${logdays} |tee >> ${scriptlog} - count=$(find ${scriptlogdir}/* -mtime +${logdays}|wc -l) - find ${scriptlogdir}/* -mtime +${logdays} -exec rm {} \; - echo -e "[\e[0;36m INFO \e[0;39m] Log cleaner removed ${count} log files" - echo -e "$(date '+%b %d %H:%M:%S') ${servicename}: Log cleaner removed ${count} log files" >> ${scriptlog} -fi -} - -fn_restartserver(){ - echo -e "$(date '+%b %d %H:%M:%S') ${servicename}: Restarting ${servername}" >> ${scriptlog} - fn_stopserver - fn_startserver +fn_functions(){ +# Functions are defined in fn_functions. +functionfile="${FUNCNAME}" +fn_runfunction } -fn_startserver(){ -if [ ! -d ${scriptlogdir} ];then - mkdir ${rootdir}/log - mkdir ${scriptlogdir} - echo -e "[\e[0;36m INFO \e[0;39m] ${servicename}: ${servername} Creating log directorys ${scriptlogdir}" - echo -e "$(date '+%b %d %H:%M:%S') ${servicename}: ${servername} Creating log directorys ${scriptlogdir}" >> ${scriptlog} -fi -if [ ! -h ${rootdir}/log/server ]; then - ln -sv ${gamelogdir} ${rootdir}/log/server -fi -fn_rootcheck -fn_syscheck -fn_runcheck -fn_inicheck -fn_logmanager -mv ${scriptlog} ${scriptlogdate} -echo -en "[ .... ] Starting ${servicename}: ${servername}" -${filesdir}/ts3server_startscript.sh start inifile=${ini} > /dev/null 2>&1 -sleep 1 -fn_status -if [ "$ts3status" = "Server seems to have died" ] || [ "$ts3status" = "No server running (ts3server.pid is missing)" ];then - echo -en "\r[\e[0;31m FAIL \e[0;39m] Starting ${servicename}: Failed to start ${servername}" - echo -e "$(date '+%b %d %H:%M:%S') ${servicename}: ${servername} Server is unable to start" >> ${scriptlog} - echo -e "Check ${filesdir}/logs for failure reason" |tee ${scriptlog} -else - echo -en "\r[\e[0;32m OK \e[0;39m] Starting ${servicename}: ${servername}" - echo -e "$(date '+%b %d %H:%M:%S') ${servicename}: Started ${servername}" >> ${scriptlog} -fi -sleep 0.5 -echo -en "\n" -} - -fn_stopserver(){ -fn_rootcheck -fn_syscheck -fn_status -echo -en "[ .... ] Stopping ${servicename}: ${servername}" -echo -e "$(date '+%b %d %H:%M:%S') ${servicename}: Stopping ${servername}" >> ${scriptlog} -sleep 0.5 -if [ "$ts3status" = "No server running (ts3server.pid is missing)" ];then - echo -en "\r[\e[0;31m FAIL \e[0;39m] Stopping ${servicename}: ${servername} is already stopped" - echo -e "$(date '+%b %d %H:%M:%S') ${servicename}: ${servername} is already stopped" >> ${scriptlog} -else - echo -en "\r[\e[0;32m OK \e[0;39m] Stopping ${servicename}: ${servername}" - echo -e "$(date '+%b %d %H:%M:%S') ${servicename}: Stopped ${servername}" >> ${scriptlog} - ${filesdir}/ts3server_startscript.sh stop inifile=${ini} > /dev/null 2>&1 -fi -echo -en "\n" -} - -fn_monitorserver(){ -fn_rootcheck -fn_syscheck -fn_logmanager -echo -en "[ .... ] Monitor is checking ${servicename}: ${servername}" -echo -e "$( date '+%b %d %H:%M:%S') ${servicename}: Monitor is checking ${servername}" >> ${scriptlog} -sleep 0.5 -fn_runcheck -echo -en "\r[\e[1;33m WARN \e[0;39m] ${servicename}: Monitor detected ${servername} had stopped!\n" -echo -e "$( date '+%b %d %H:%M:%S') ${servicename}: Monitor detected ${servername} had stopped!" >> ${scriptlog} -sleep 1 -fn_status -if [ "$ts3status" = "Server seems to have died" ];then - echo -en "[\e[0;36m INFO \e[0;39m] ${servicename}: ${servername} Server seems to have died" - echo -e "$(date '+%b %d %H:%M:%S') ${servicename}: ${servername} Server seems to have died" >> ${scriptlog} - - failurereason="Server seems to have died" - echo -en "[\e[0;36m INFO \e[0;39m] ${servicename}: ${servername} No server running (ts3server.pid is missing)" - echo -e "$(date '+%b %d %H:%M:%S') ${servicename}: ${servername} No server running (ts3server.pid is missing)" >> ${scriptlog} - failurereason="No server running (ts3server.pid is missing)" -else - echo -en "[\e[0;36m INFO \e[0;39m] ${servicename}: ${servername} Unknown error" - echo -e "$(date '+%b %d %H:%M:%S') ${servicename}: ${servername} Unknown error" >> ${scriptlog} - failurereason="Unknown error" -fi -sleep 0.5 -echo -en "\n" -if [ "${emailnotification}" = "on" ];then - subject="${servicename} Monitor - Restarting ${servername}" - actiontaken="restarted ${servername}" - fn_emailnotification -fi -sleep 0.5 -echo -en "\n" -fn_restartserver -} - -fn_status(){ -ts3status=$(${filesdir}/ts3server_startscript.sh status inifile=${ini}) -} +fn_functions -case "$1" in - start) - fn_startserver;; - stop) - fn_stopserver;; - restart) - fn_restartserver;; - backup) - fn_backupserver;; - monitor) - fn_monitorserver;; - email-test) - fn_emailtest;; - *) - echo "Usage: $0 {start|stop|restart|backup|monitor|email-test}" - exit 1;; -esac -exit \ No newline at end of file +getopt=$1 +fn_getopt diff --git a/functions/fn_check_ts3status b/functions/fn_check_ts3status new file mode 100644 index 000000000..e104fd0b2 --- /dev/null +++ b/functions/fn_check_ts3status @@ -0,0 +1,10 @@ +#!/bin/bash +# LGSM fn_check_ts3status function +# Author: Daniel Gibbs +# Website: http://danielgibbs.co.uk +# Version: 070215 + +# Checks the status of Teamspeak 3. + +cd "${executabledir}" +ts3status=$(./ts3server_startscript.sh status servercfgfullpathfile=${servercfgfullpath}) \ No newline at end of file diff --git a/functions/fn_details b/functions/fn_details index 465df6d88..00d32b59b 100644 --- a/functions/fn_details +++ b/functions/fn_details @@ -2,7 +2,7 @@ # LGSM fn_details function # Author: Daniel Gibbs # Website: http://danielgibbs.co.uk -# Version: 220115 +# Version: 080214 # Description: Displays server infomation. @@ -81,6 +81,9 @@ echo -e "\e[34mLocation:£\e[0m${rootdir}" >> .fn_details_gameserver if [ ! -z "${servercfgfullpath}" ]; then echo -e "\e[34mConfig file:£\e[0m${servercfgfullpath}" >> .fn_details_gameserver fi +if [ "${gamename}" == "Teamspeak 3" ]; then + echo -e "\e[34mdbplugin:£\e[0m${dbplugin}" >> .fn_details_gameserver +fi column -s '£' -t .fn_details_gameserver rm -f .fn_details_gameserver } @@ -121,7 +124,7 @@ echo -e "" # Engine Specific details -fn_avalanchedetails(){ +fn_details_avalanche(){ fn_check_ip fn_details_config fn_details_distro @@ -147,7 +150,7 @@ rm -f .fn_details_ports fn_details_statusbottom } -fn_realvirtualitydetails(){ +fn_details_realvirtuality(){ fn_check_ip pid=$(tmux list-sessions 2>&1|awk '{print $1}'|grep -E "^${servicename}:"|wc -l) fn_parms @@ -181,7 +184,7 @@ rm -f .fn_details_ports fn_details_statusbottom } -fn_seriousengine35details(){ +fn_details_seriousengine35(){ fn_check_ip pid=$(tmux list-sessions 2>&1|awk '{print $1}'|grep -E "^${servicename}:"|wc -l) fn_parms @@ -210,7 +213,7 @@ rm -f .fn_details_ports fn_details_statusbottom } -fn_sourcedetails(){ +fn_details_source(){ fn_check_ip fn_parms fn_details_config @@ -241,7 +244,7 @@ rm -f .fn_details_ports fn_details_statusbottom } -fn_sparkdetails(){ +fn_details_spark(){ fn_check_ip pid=$(tmux list-sessions 2>&1|awk '{print $1}'|grep -E "^${servicename}:"|wc -l) fn_parms @@ -279,7 +282,34 @@ rm -f .fn_details_ports fn_details_statusbottom } -fn_unity3ddetails(){ +fn_details_teamspeak3(){ +fn_details_config +fn_details_distro +fn_details_os +fn_details_performance +fn_details_disk +fn_details_gameserver +fn_details_backup +fn_details_commandlineparms +echo -e "" +echo -e "\e[92mPorts\e[0m" +printf '%*s\n' "${COLUMNS:-$(tput cols)}" '' | tr ' ' = +echo -e "Change ports by editing the command-line" +echo -e "parameters in ${selfname}." +echo -e "" +echo -e "Useful port diagnostic command:" +echo -e "netstat -atunp | grep ts3server" +echo -e "" +echo -e "DESCRIPTION£DIRECTION£PORT£PROTOCOL" >> .fn_details_ports +echo -e "> Voice£INBOUND£${port}£udp" >> .fn_details_ports +echo -e "> ServerQuery£INBOUND£${queryport}£tcp" >> .fn_details_ports +echo -e "> File transfer£INBOUND£${fileport}£tcp" >> .fn_details_ports +column -s '£' -t .fn_details_ports +rm -f .fn_details_ports +fn_details_statusbottom +} + +fn_details_unity3d(){ fn_check_ip pid=$(tmux list-sessions 2>&1|awk '{print $1}'|grep -E "^${servicename}:"|wc -l) fn_parms @@ -326,7 +356,7 @@ rm -f .fn_details_ports fn_details_statusbottom } -fn_unrealdetails(){ +fn_details_unreal(){ fn_check_ip pid=$(tmux list-sessions 2>&1|awk '{print $1}'|grep -E "^${servicename}:"|wc -l) fn_parms @@ -384,19 +414,21 @@ fn_details_statusbottom } if [ "${engine}" == "avalanche" ]; then - fn_avalanchedetails + fn_details_avalanche elif [ "${engine}" == "realvirtuality" ]; then - fn_realvirtualitydetails + fn_details_realvirtuality elif [ "${engine}" == "seriousengine35" ]; then - fn_seriousengine35details + fn_details_seriousengine35 elif [ "${engine}" == "source" ]||[ "${engine}" == "goldsource" ]; then - fn_sourcedetails + fn_details_source elif [ "${engine}" == "spark" ]; then - fn_sparkdetails + fn_details_spark elif [ "${engine}" == "unity3d" ]; then - fn_unity3ddetails + fn_details_unity3d elif [ "${engine}" == "unreal" ]||[ "${engine}" == "unreal2" ]; then - fn_unrealdetails + fn_details_unreal +elif [ "${gamename}" == "Teamspeak 3" ]; then + fn_details_teamspeak3 else fn_printerrornl "Unable to detect server engine." fi \ No newline at end of file diff --git a/functions/fn_details_config b/functions/fn_details_config index f8a974f56..515ce1b28 100644 --- a/functions/fn_details_config +++ b/functions/fn_details_config @@ -2,7 +2,7 @@ # LGSM fn_details_config function # Author: Daniel Gibbs # Website: http://danielgibbs.co.uk -# Version: 210115 +# Version: 080215 # Description: Gets specific details from config files. @@ -27,7 +27,18 @@ elif [ "${engine}" == "source" ]||[ "${engine}" == "goldsource" ]; then elif [ "${engine}" == "spark" ]; then queryport=$((${port} + 1)) - +elif [ "${gamename}" == "Teamspeak 3" ]; then + if [ -s "${servercfgfullpath}" ]; then + port=$(grep default_voice_port= "${servercfgfullpath}"|tr -cd [:digit:]) + queryport=$(grep query_port= "${servercfgfullpath}"|tr -cd [:digit:]) + fileport=$(grep filetransfer_port= "${servercfgfullpath}"|tr -cd [:digit:]) + ip=$(grep voice_ip= "${servercfgfullpath}"|sed 's/\voice_ip=//g') + dbplugin=$(grep dbplugin= "${servercfgfullpath}"|sed 's/\dbplugin=//g') + else + port="9987" + queryport="10011" + fileport="30033" + fi elif [ "${engine}" == "unity3d" ]; then servername=$(grep ServerName "${servercfgfullpath}"|sed 's/^.*value="//'|cut -f1 -d"\"") port=$(grep ServerPort "${servercfgfullpath}"|tr -cd [:digit:]) @@ -49,11 +60,9 @@ elif [ "${engine}" == "unreal" ]||[ "${engine}" == "unreal2" ]; then webadminport=$(grep ListenPort= "${servercfgfullpath}"|tr -d '\r'|tr -cd [:digit:]) if [ "${engine}" == "unreal" ]; then webadminuser=$(grep AdminUsername= "${servercfgfullpath}"|sed 's/\AdminUsername=//g') - webadminpass=$(grep UTServerAdmin.UTServerAdmin "${servercfgfullpath}" -A 2| grep AdminPassword= |sed 's/\AdminPassword=//g') + webadminpass=$(grep UTServerAdmin.UTServerAdmin "${servercfgfullpath}" -A 2| grep AdminPassword=|sed 's/\AdminPassword=//g') else webadminuser=$(grep AdminName= "${servercfgfullpath}"|sed 's/\AdminName=//g') webadminpass=$(grep AdminPassword= "${servercfgfullpath}"|sed 's/\AdminPassword=//g') fi - - fi \ No newline at end of file diff --git a/functions/fn_getopt b/functions/fn_getopt index 40885e2ea..12fe340f5 100644 --- a/functions/fn_getopt +++ b/functions/fn_getopt @@ -2,7 +2,7 @@ # LGSM fn_getopt function # Author: Daniel Gibbs # Website: http://danielgibbs.co.uk -# Version: 210115 +# Version: 080214 # Description: getopt arguments. @@ -48,6 +48,31 @@ esac exit } +fn_getopt_teamspeak3(){ +case "$1" in + start) + fn_start;; + stop) + fn_stop;; + restart) + fn_restart;; + backup) + fn_backup;; + monitor) + fn_monitor;; + email-test) + fn_email_test;; + details) + fn_details;; + backup) + fn_backup;; + *) + echo "Usage: $0 {start|stop|restart|backup|monitor|email-test|details|backup}" + exit 1;; +esac +exit +} + fn_getopt_unreal(){ case "$getopt" in start) diff --git a/functions/fn_logs b/functions/fn_logs index 71a762721..0913525ed 100644 --- a/functions/fn_logs +++ b/functions/fn_logs @@ -2,13 +2,16 @@ # LGSM fn_logs function # Author: Daniel Gibbs # Website: http://danielgibbs.co.uk -# Version: 210115 +# Version: 080214 # Description: Acts as a log rotater, removing old logs. local modulename="Log Manager" -if [ ! -e "${consolelog}" ]; then - touch "${consolelog}" + +if [ -n "${consolelog}" ]; then + if [ ! -e "${consolelog}" ]; then + touch "${consolelog}" + fi fi # log manager will active if finds logs older than ${logdays} if [ $(find "${scriptlogdir}"/* -mtime +${logdays}|wc -l) -ne "0" ]; then @@ -26,12 +29,17 @@ if [ $(find "${scriptlogdir}"/* -mtime +${logdays}|wc -l) -ne "0" ]; then find "${gamelogdir}"/* -mtime +${logdays}|tee >> "${scriptlog}" fi find "${scriptlogdir}"/* -mtime +${logdays}|tee >> "${scriptlog}" - find "${consolelogdir}"/* -mtime +${logdays}|tee >> "${scriptlog}" + if + if [ -n "${consolelog}" ]; then + find "${consolelogdir}"/* -mtime +${logdays}|tee >> "${scriptlog}" + fi if [ "${engine}" == "unreal2" ]; then gamecount=$(find "${scriptlogdir}"/* -mtime +${logdays}|wc -l) fi scriptcount=$(find "${scriptlogdir}"/* -mtime +${logdays}|wc -l) - consolecount=$(find "${consolelogdir}"/* -mtime +${logdays}|wc -l) + if [ -n "${consolelog}" ]; then + consolecount=$(find "${consolelogdir}"/* -mtime +${logdays}|wc -l) + fi count=$((${scriptcount} + ${consolecount})) if [ "${engine}" == "unreal2" ]; then count=$((${scriptcount} + ${consolecount} + ${gamecount})) @@ -42,7 +50,9 @@ if [ $(find "${scriptlogdir}"/* -mtime +${logdays}|wc -l) -ne "0" ]; then find "${gamelogdir}"/* -mtime +${logdays} -exec rm {} \; fi find "${scriptlogdir}"/* -mtime +${logdays} -exec rm {} \; - find "${consolelogdir}"/* -mtime +${logdays} -exec rm {} \; + if [ -n "${consolelog}" ]; then + find "${consolelogdir}"/* -mtime +${logdays} -exec rm {} \; + fi fn_printok "Removed ${count} log files" fn_scriptlog "Removed ${count} log files" sleep 1 diff --git a/functions/fn_start b/functions/fn_start index 46af1bc16..daecc258f 100644 --- a/functions/fn_start +++ b/functions/fn_start @@ -2,11 +2,71 @@ # LGSM fn_start function # Author: Daniel Gibbs # Website: http://danielgibbs.co.uk -# Version: 210115 +# Version: 080214 # Description: Starts the server. local modulename="Starting" + +fn_start_teamspeak3(){ +# Create any missing log dirs +if [ ! -d ${scriptlogdir} ];then + mkdir ${rootdir}/log + mkdir ${scriptlogdir} + fn_printinfo "Creating log directorys ${scriptlogdir}" + fn_scriptlog "Creating log directorys ${scriptlogdir}" +fi +if [ ! -h ${rootdir}/log/server ]; then + ln -sv ${gamelogdir} ${rootdir}/log/server +fi + +fn_check_root +fn_check_systemdir +fn_check_ts3status +if [ "${ts3status}" = "Server is running" ]; then + fn_printinfo "${servername} is already running" + fn_scriptlog "${servername} is already running" + sleep 1 + echo -en "\n" + exit +fi +if [ ! -e ${servercfgfullpath} ]; then + fn_printwarn "${servercfgfullpath} is missing" + fn_scriptlog "${servercfgfullpath} is missing" + sleep 1 + fn_printinfo "Creating blank ${servercfgfullpath}" + fn_scriptlog "Creating blank ${servercfgfullpath}" + sleep 1 + fn_printinfo "${servercfgfullpath} can remain blank by default." + fn_scriptlog "${servercfgfullpath} can remain blank by default." + sleep 1 + touch "${servercfgfullpath}" +fi +fn_logs +fn_printdots "${servername}" +fn_scriptlog "${servername}" +sleep 1 +mv "${scriptlog}" "${scriptlogdate}" +# Create lock file +date > "${rootdir}/${lockselfname}" +cd "${executabledir}" +./ts3server_startscript.sh start inifile=${servercfgfullpath} > /dev/null 2>&1 +sleep 1 +fn_check_ts3status +# +if [ "${ts3status}" = "Server seems to have died" ] || [ "${ts3status}" = "No server running (ts3server.pid is missing)" ];then + fn_printfailnl "Unable to start ${servername}" + fn_scriptlog "Unable to start ${servername}" + echo -en " Check log files: ${rootdir}/log" +else + fn_printok "${servername}" + fn_scriptlog "Started ${servername}" +fi +sleep 0.5 +echo -en "\n" +} + +fn_start_tmux(){ fn_check_root fn_check_systemdir fn_check_ip @@ -66,4 +126,11 @@ else fi rm "${scriptlogdir}/.${servicename}-tmux-error.tmp" sleep 1 -echo -en "\n" \ No newline at end of file +echo -en "\n" +} + +if [ "${gamename}" == "Teamspeak 3" ]; then + fn_start_teamspeak3 +else + fn_start_tmux +fi \ No newline at end of file diff --git a/functions/fn_stop b/functions/fn_stop index 398776e63..a57899cd9 100644 --- a/functions/fn_stop +++ b/functions/fn_stop @@ -2,11 +2,34 @@ # LGSM fn_stop function # Author: Daniel Gibbs # Website: http://danielgibbs.co.uk -# Version: 210115 +# Version: 080214 # Description: Stops the server. local modulename="Stopping" + +fn_stop_teamspeak3(){ +fn_check_root +fn_check_systemdir +fn_printdots "${servername}" +fn_scriptlog "${servername}" +sleep 1 +fn_check_ts3status +if [ "${ts3status}" = "No server running (ts3server.pid is missing)" ];then + fn_printfail "${servername} is already stopped" + fn_scriptlog "${servername} is already stopped" +else + ${filesdir}/ts3server_startscript.sh stop inifile=${ini} > /dev/null 2>&1 + fn_printok "${servername}" + fn_scriptlog "Stopped ${servername}" +fi +# Remove lock file +rm -f "${rootdir}/${lockselfname}" +sleep 1 +echo -en "\n" +} + +fn_stop_tmux(){ fn_check_root fn_check_systemdir fn_details_config @@ -24,6 +47,13 @@ else fn_scriptlog "Stopped ${servername}" fi # Remove lock file -rm -f "${lockselfname}" +rm -f "${rootdir}/${lockselfname}" sleep 1 -echo -en "\n" \ No newline at end of file +echo -en "\n" +} + +if [ "${gamename}" == "Teamspeak 3" ]; then + fn_stop_teamspeak3 +else + fn_stop_tmux +fi \ No newline at end of file