Browse Source

Getting server status is now consistent

Both tmux and ts3 status gathering are the same/ Now call a file called
check_status.sh this returns the server status as 0 or 1
pull/820/merge
Daniel Gibbs 9 years ago
parent
commit
3bbfb0dbe5
  1. 10
      lgsm/functions/check.sh
  2. 22
      lgsm/functions/check_status.sh
  3. 6
      lgsm/functions/command_backup.sh
  4. 6
      lgsm/functions/command_console.sh
  5. 300
      lgsm/functions/command_details.sh
  6. 17
      lgsm/functions/command_monitor.sh
  7. 231
      lgsm/functions/command_start.sh
  8. 5
      lgsm/functions/command_validate.sh
  9. 7
      lgsm/functions/core_functions.sh
  10. 491
      lgsm/functions/update_check.sh

10
lgsm/functions/check.sh

@ -2,7 +2,7 @@
# LGSM fn_check function # LGSM fn_check function
# Author: Daniel Gibbs # Author: Daniel Gibbs
# Website: http://gameservermanagers.com # Website: http://gameservermanagers.com
lgsm_version="060316" lgsm_version="060516"
# Description: Overall function for managing checks. # Description: Overall function for managing checks.
# Runs checks that will either halt on or fix an issue. # Runs checks that will either halt on or fix an issue.
@ -70,3 +70,11 @@ do
check_config.sh check_config.sh
fi fi
done done
local allowed_commands_array=( command_details.sh command_monitor.sh command_start.sh command_stop.sh command_ts3_server_pass.sh update_check.sh command_details.sh command_validate.sh )
for allowed_command in "${allowed_commands_array[@]}"
do
if [ "${allowed_command}" == "${function_selfname}" ]; then
check_status.sh
fi
done

22
lgsm/functions/check_status.sh

@ -0,0 +1,22 @@
#!/bin/bash
# LGSM check_status function
# Author: Daniel Gibbs
# Website: http://gameservermanagers.com
lgsm_version="060516"
# Description: Checks the proccess status of the server. Either online or offline.
if [ "${gamename}" == "Teamspeak 3" ]; then
# 1: Server is running
# 0: Server seems to have died
# 0: No server running (ts3server.pid is missing)
status=$(./ts3server_startscript.sh status servercfgfullpathfile=${servercfgfullpath})
if [ "${status}" == "Server is running" ]; then
status=1
else
status=0
ts3error=$(./ts3server_startscript.sh status servercfgfullpathfile=${servercfgfullpath})
fi
else
status=$(tmux list-sessions 2>&1 | awk '{print $1}' | grep -Ec "^${servicename}:")
fi

6
lgsm/functions/command_backup.sh

@ -2,7 +2,7 @@
# LGSM command_backup.sh function # LGSM command_backup.sh function
# Author: Daniel Gibbs # Author: Daniel Gibbs
# Website: http://gameservermanagers.com # Website: http://gameservermanagers.com
lgsm_version="190316" lgsm_version="060516"
# Description: Creates a .tar.gz file in the backup directory. # Description: Creates a .tar.gz file in the backup directory.
@ -24,8 +24,8 @@ while true; do
esac esac
done done
echo "" echo ""
tmuxwc=$(tmux list-sessions 2>&1|awk '{print $1}'|grep -v failed|grep -Ec "^${servicename}:") check_status.sh
if [ "${tmuxwc}" -eq 1 ]; then if [ "${status}" != "0" ]; then
echo "" echo ""
fn_printwarningnl "${servicename} is currently running." fn_printwarningnl "${servicename} is currently running."
sleep 1 sleep 1

6
lgsm/functions/command_console.sh

@ -2,7 +2,7 @@
# LGSM command_console.sh function # LGSM command_console.sh function
# Author: Daniel Gibbs # Author: Daniel Gibbs
# Website: http://gameservermanagers.com # Website: http://gameservermanagers.com
lgsm_version="271215" lgsm_version="060516"
# Description: Gives access to the server tmux console. # Description: Gives access to the server tmux console.
@ -27,8 +27,8 @@ esac
done done
fn_print_dots "Starting" fn_print_dots "Starting"
sleep 1 sleep 1
tmuxwc=$(tmux list-sessions 2>&1|awk '{print $1}'|grep -v failed|grep -Ec "^${servicename}:") check_status.sh
if [ "${tmuxwc}" -eq 1 ]; then if [ "${status}" != "0" ]; then
fn_print_ok_nl "Starting" fn_print_ok_nl "Starting"
fn_scriptlog "accessed" fn_scriptlog "accessed"
sleep 1 sleep 1

300
lgsm/functions/command_details.sh

@ -2,7 +2,7 @@
# LGSM command_details.sh function # LGSM command_details.sh function
# Author: Daniel Gibbs # Author: Daniel Gibbs
# Website: http://gameservermanagers.com # Website: http://gameservermanagers.com
lgsm_version="230216" lgsm_version="060516"
# Description: Displays server infomation. # Description: Displays server infomation.
@ -12,174 +12,206 @@ function_selfname="$(basename $(readlink -f "${BASH_SOURCE[0]}"))"
# This applies to all engines # This applies to all engines
fn_details_os(){ fn_details_os(){
echo -e "" #
echo -e "\e[93mDistro Details\e[0m" # Distro Details
printf '%*s\n' "${COLUMNS:-$(tput cols)}" '' | tr ' ' = # =====================================
{ # Distro: Ubuntu 14.04.4 LTS
echo -e "\e[34mDistro:\t\e[0m${os}" # Arch: x86_64
echo -e "\e[34mArch:\t\e[0m${arch}" # Kernel: 3.13.0-79-generic
echo -e "\e[34mKernel:\t\e[0m${kernel}" # Hostname: hostname
echo -e "\e[34mHostname:\t\e[0m$HOSTNAME" # tmux: tmux 1.8
echo -e "\e[34mtmux:\t\e[0m${tmuxv}" # GLIBC: 2.19
echo -e "\e[34mGLIBC:\t\e[0m${glibcv}"
} | column -s $'\t' -t echo -e ""
echo -e "\e[93mDistro Details\e[0m"
printf '%*s\n' "${COLUMNS:-$(tput cols)}" '' | tr ' ' =
{
echo -e "\e[34mDistro:\t\e[0m${os}"
echo -e "\e[34mArch:\t\e[0m${arch}"
echo -e "\e[34mKernel:\t\e[0m${kernel}"
echo -e "\e[34mHostname:\t\e[0m$HOSTNAME"
echo -e "\e[34mtmux:\t\e[0m${tmuxv}"
echo -e "\e[34mGLIBC:\t\e[0m${glibcv}"
} | column -s $'\t' -t
} }
fn_details_performance(){ fn_details_performance(){
echo -e "" #
echo -e "\e[93mPerformance\e[0m" # Performance
printf '%*s\n' "${COLUMNS:-$(tput cols)}" '' | tr ' ' = # =====================================
{ # Uptime: 55d, 3h, 38m
echo -e "\e[34mUptime:\t\e[0m${days}d, ${hours}h, ${minutes}m" # Avg Load: 1.00, 1.01, 0.78
echo -e "\e[34mAvg Load:\t\e[0m${load}" #
} | column -s $'\t' -t # Mem: total used free
echo -e "" # Physical: 741M 656M 85M
{ # Swap: 0B 0B 0B
echo -e "\e[34mMem:\t\e[34mtotal\t used\t free\e[0m"
echo -e "\e[34mPhysical:\t\e[0m${physmemtotal}\t${physmemused}\t${physmemfree}\e[0m" echo -e ""
echo -e "\e[34mSwap:\t\e[0m${swaptotal}\t${swapused}\t${swapfree}\e[0m" echo -e "\e[93mPerformance\e[0m"
} | column -s $'\t' -t printf '%*s\n' "${COLUMNS:-$(tput cols)}" '' | tr ' ' =
{
echo -e "\e[34mUptime:\t\e[0m${days}d, ${hours}h, ${minutes}m"
echo -e "\e[34mAvg Load:\t\e[0m${load}"
} | column -s $'\t' -t
echo -e ""
{
echo -e "\e[34mMem:\t\e[34mtotal\t used\t free\e[0m"
echo -e "\e[34mPhysical:\t\e[0m${physmemtotal}\t${physmemused}\t${physmemfree}\e[0m"
echo -e "\e[34mSwap:\t\e[0m${swaptotal}\t${swapused}\t${swapfree}\e[0m"
} | column -s $'\t' -t
} }
fn_details_disk(){ fn_details_disk(){
echo -e "" #
echo -e "\e[93mStorage\e[0m" # Storage
printf '%*s\n' "${COLUMNS:-$(tput cols)}" '' | tr ' ' = # =====================================
{ # Filesystem: /dev/disk/by-uuid/320c8edd-a2ce-4a23-8c9d-e00a7af2d6ff
echo -e "\e[34mFilesystem:\t\e[0m${filesystem}" # Total: 15G
echo -e "\e[34mTotal:\t\e[0m${totalspace}" # Used: 8.4G
echo -e "\e[34mUsed:\t\e[0m${usedspace}" # Available: 5.7G
echo -e "\e[34mAvailable:\t\e[0m${availspace}" # Serverfiles: 961M
echo -e "\e[34mServerfiles:\t\e[0m${filesdirdu}"
if [ -d "${backupdir}" ]; then echo -e ""
echo -e "\e[34mBackups:\t\e[0m${backupdirdu}" echo -e "\e[93mStorage\e[0m"
fi printf '%*s\n' "${COLUMNS:-$(tput cols)}" '' | tr ' ' =
} | column -s $'\t' -t {
echo -e "\e[34mFilesystem:\t\e[0m${filesystem}"
echo -e "\e[34mTotal:\t\e[0m${totalspace}"
echo -e "\e[34mUsed:\t\e[0m${usedspace}"
echo -e "\e[34mAvailable:\t\e[0m${availspace}"
echo -e "\e[34mServerfiles:\t\e[0m${filesdirdu}"
if [ -d "${backupdir}" ]; then
echo -e "\e[34mBackups:\t\e[0m${backupdirdu}"
fi
} | column -s $'\t' -t
} }
fn_details_gameserver(){ fn_details_gameserver(){
echo -e "" #
# Quake Live Server Details
# =====================================
# Server name: ql-server
# Server IP: 1.2.3.4:27960
# RCON password: CHANGE_ME
# Server password: NOT SET
# Slots: 16
# Status: OFFLINE
## server details echo -e ""
echo -e "\e[92m${gamename} Server Details\e[0m" echo -e "\e[92m${gamename} Server Details\e[0m"
printf '%*s\n' "${COLUMNS:-$(tput cols)}" '' | tr ' ' = printf '%*s\n' "${COLUMNS:-$(tput cols)}" '' | tr ' ' =
{ {
# server name # Server name
echo -e "\e[34mServer name:\t\e[0m${servername}" echo -e "\e[34mServer name:\t\e[0m${servername}"
# server ip # Server ip
echo -e "\e[34mServer IP:\t\e[0m${ip}:${port}" echo -e "\e[34mServer IP:\t\e[0m${ip}:${port}"
# rcon password # Server password
if [ -n "${rconpassword}" ]; then if [ -n "${serverpassword}" ]; then
echo -e "\e[34mRCON password:\t\e[0m${rconpassword}" echo -e "\e[34mServer password:\t\e[0m${serverpassword}"
fi fi
# server password # RCON password
if [ -n "${serverpassword}" ]; then if [ -n "${rconpassword}" ]; then
echo -e "\e[34mServer password:\t\e[0m${serverpassword}" echo -e "\e[34mRCON password:\t\e[0m${rconpassword}"
fi fi
# admin password # Admin password
if [ -n "${adminpassword}" ]; then if [ -n "${adminpassword}" ]; then
echo -e "\e[34mAdmin password:\t\e[0m${adminpassword}" echo -e "\e[34mAdmin password:\t\e[0m${adminpassword}"
fi fi
# slots # Stats password (Quake Live)
if [ -n "${slots}" ]; then if [ -n "${statspassword}" ]; then
echo -e "\e[34mSlots:\t\e[0m${slots}" echo -e "\e[34mStats password:\t\e[0m${statspassword}"
fi fi
# game mode # Slots
if [ -n "${gamemode}" ]; then if [ -n "${slots}" ]; then
echo -e "\e[34mGame mode:\t\e[0m${gamemode}" echo -e "\e[34mSlots:\t\e[0m${slots}"
fi fi
# game world # Game mode
if [ -n "${gameworld}" ]; then if [ -n "${gamemode}" ]; then
echo -e "\e[34mGame world:\t\e[0m${gameworld}" echo -e "\e[34mGame mode:\t\e[0m${gamemode}"
fi fi
# tick rate # Game world
if [ -n "${tickrate}" ]; then if [ -n "${gameworld}" ]; then
echo -e "\e[34mTick rate:\t\e[0m${tickrate}" echo -e "\e[34mGame world:\t\e[0m${gameworld}"
fi fi
# online status # Tick rate
if [ "${gamename}" == "Teamspeak 3" ]; then if [ -n "${tickrate}" ]; then
info_ts3status.sh echo -e "\e[34mTick rate:\t\e[0m${tickrate}"
if [ "${ts3status}" = "Server seems to have died" ]||[ "${ts3status}" = "No server running (ts3server.pid is missing)" ]; then
echo -e "\e[34mStatus:\t\e[0;31mOFFLINE\e[0m"
else
echo -e "\e[34mStatus:\t\e[0;32mONLINE\e[0m"
fi fi
else
pid=$(tmux list-sessions 2>&1 | awk '{print $1}' | grep -Ec "^${servicename}:") # teamspeak dbplugin
if [ "${pid}" == "0" ]; then if [ -n "${dbplugin}" ]; then
echo -e "\e[34mdbplugin:\t\e[0m${dbplugin}"
fi
# online status
if [ "${status}" == "0" ]; then
echo -e "\e[34mStatus:\t\e[0;31mOFFLINE\e[0m" echo -e "\e[34mStatus:\t\e[0;31mOFFLINE\e[0m"
else else
echo -e "\e[34mStatus:\t\e[0;32mONLINE\e[0m" echo -e "\e[34mStatus:\t\e[0;32mONLINE\e[0m"
fi fi
fi } | column -s $'\t' -t
echo -e ""
# teamspeak dbplugin
if [ -n "${dbplugin}" ]; then
echo -e "\e[34mdbplugin:\t\e[0m${dbplugin}"
fi
} | column -s $'\t' -t
echo -e ""
## script details
echo -e "\e[92m${selfname} Script Details\e[0m"
printf '%*s\n' "${COLUMNS:-$(tput cols)}" '' | tr ' ' =
{
# service name
echo -e "\e[34mService name:\t\e[0m${servicename}"
# script version ## script details
if [ -n "${version}" ]; then echo -e "\e[92m${selfname} Script Details\e[0m"
echo -e "\e[34m${selfname} version:\t\e[0m${version}" printf '%*s\n' "${COLUMNS:-$(tput cols)}" '' | tr ' ' =
fi {
# service name
echo -e "\e[34mService name:\t\e[0m${servicename}"
# script user # script version
echo -e "\e[34mUser:\t\e[0m$(whoami)" if [ -n "${version}" ]; then
echo -e "\e[34m${selfname} version:\t\e[0m${version}"
fi
# GLIBC required # script user
if [ -n "${glibcrequired}" ] && [ "${glibcrequired}" != "UNKNOWN" ]; then echo -e "\e[34mUser:\t\e[0m$(whoami)"
if [ "$(ldd --version | sed -n '1 p' | tr -cd '[:digit:]' | tail -c 3)" -lt "$(echo "${glibcrequired}" | sed -n '1 p' | tr -cd '[:digit:]' | tail -c 3)" ]; then
if [ "${glibcfix}" == "yes" ]; then # GLIBC required
echo -e "\e[34mGLIBC required:\t\e[0;31m${glibcrequired} \e[0m(\e[0;32mUsing GLIBC fix\e[0m)" if [ -n "${glibcrequired}" ] && [ "${glibcrequired}" != "UNKNOWN" ]; then
if [ "$(ldd --version | sed -n '1 p' | tr -cd '[:digit:]' | tail -c 3)" -lt "$(echo "${glibcrequired}" | sed -n '1 p' | tr -cd '[:digit:]' | tail -c 3)" ]; then
if [ "${glibcfix}" == "yes" ]; then
echo -e "\e[34mGLIBC required:\t\e[0;31m${glibcrequired} \e[0m(\e[0;32mUsing GLIBC fix\e[0m)"
else
echo -e "\e[34mGLIBC required:\t\e[0;31m${glibcrequired}\e[0m(\e[0;32mGLIBC version too old\e[0m)"
fi
else else
echo -e "\e[34mGLIBC required:\t\e[0;31m${glibcrequired}\e[0m(\e[0;32mGLIBC version too old\e[0m)" echo -e "\e[34mGLIBC required:\t\e[0;32m${glibcrequired}\e[0m"
fi fi
else
echo -e "\e[34mGLIBC required:\t\e[0;32m${glibcrequired}\e[0m"
fi fi
fi
# email notification # email notification
if [ -n "${emailnotification}" ]; then if [ -n "${emailnotification}" ]; then
echo -e "\e[34mEmail notification:\t\e[0m${emailnotification}" echo -e "\e[34mEmail notification:\t\e[0m${emailnotification}"
fi fi
# update on start # update on start
if [ -n "${updateonstart}" ]; then if [ -n "${updateonstart}" ]; then
echo -e "\e[34mUpdate on start:\t\e[0m${updateonstart}" echo -e "\e[34mUpdate on start:\t\e[0m${updateonstart}"
fi fi
# script location # script location
echo -e "\e[34mLocation:\t\e[0m${rootdir}" echo -e "\e[34mLocation:\t\e[0m${rootdir}"
# config file location # config file location
if [ -n "${servercfgfullpath}" ]; then if [ -n "${servercfgfullpath}" ]; then
echo -e "\e[34mConfig file:\t\e[0m${servercfgfullpath}" echo -e "\e[34mConfig file:\t\e[0m${servercfgfullpath}"
fi fi
# network config file location (ARMA 3) # network config file location (ARMA 3)
if [ -n "${networkcfgfullpath}" ]; then if [ -n "${networkcfgfullpath}" ]; then
echo -e "\e[34mNetwork config file:\t\e[0m${networkcfgfullpath}" echo -e "\e[34mNetwork config file:\t\e[0m${networkcfgfullpath}"
fi fi
} | column -s $'\t' -t } | column -s $'\t' -t
} }
fn_details_backup(){ fn_details_backup(){

17
lgsm/functions/command_monitor.sh

@ -2,7 +2,7 @@
# LGSM command_monitor.sh function # LGSM command_monitor.sh function
# Author: Daniel Gibbs # Author: Daniel Gibbs
# Website: http://gameservermanagers.com # Website: http://gameservermanagers.com
lgsm_version="271215" lgsm_version="060516"
# Description: Monitors server by checking for running proccesses # Description: Monitors server by checking for running proccesses
# then passes to monitor_gsquery.sh. # then passes to monitor_gsquery.sh.
@ -22,8 +22,7 @@ fn_monitor_check_lockfile(){
fn_monitor_check_update(){ fn_monitor_check_update(){
# Monitor will not check if update is running. # Monitor will not check if update is running.
updatecheck=$(ps -ef|grep "${selfname} update"|grep -v grep|wc -l) if [ "$(ps -ef|grep "${selfname} update"|grep -v grep|wc -l)" >= "1" ]; then
if [ "${updatecheck}" >= "1" ]; then
fn_print_info_nl "SteamCMD is currently checking for updates" fn_print_info_nl "SteamCMD is currently checking for updates"
fn_scriptlog "SteamCMD is currently checking for updates" fn_scriptlog "SteamCMD is currently checking for updates"
sleep 1 sleep 1
@ -49,17 +48,16 @@ fn_monitor_email_notification(){
} }
fn_monitor_teamspeak3(){ fn_monitor_teamspeak3(){
info_ts3status.sh if [ "${status}" != "0" ]; then
if [ "${ts3status}" = "Server is running" ]; then
fn_print_ok "Checking session: " fn_print_ok "Checking session: "
fn_print_ok_eol_nl fn_print_ok_eol_nl
fn_scriptlog "Checking session: OK" fn_scriptlog "Checking session: OK"
exit exit
else else
fn_print_fail "Checking session: ${ts3status}: " fn_print_fail "Checking session: ${ts3error}: "
fn_print_fail_eol_nl fn_print_fail_eol_nl
fn_scriptlog "Checking session: ${ts3status}: FAIL" fn_scriptlog "Checking session: ${ts3error}: FAIL"
failurereason="${ts3status}" failurereason="${ts3error}"
fn_monitor_email_notification fn_monitor_email_notification
fi fi
fn_scriptlog "Monitor is starting ${servername}" fn_scriptlog "Monitor is starting ${servername}"
@ -69,8 +67,7 @@ fn_monitor_teamspeak3(){
fn_monitor_tmux(){ fn_monitor_tmux(){
# checks that tmux session is running # checks that tmux session is running
tmuxwc=$(tmux list-sessions 2>&1|awk '{print $1}'|grep -Ec "^${servicename}:") if [ "${status}" != "0" ]; then
if [ "${tmuxwc}" == "1" ]; then
fn_print_ok "Checking session: OK" fn_print_ok "Checking session: OK"
fn_print_ok_eol_nl fn_print_ok_eol_nl
fn_scriptlog "Checking session: OK" fn_scriptlog "Checking session: OK"

231
lgsm/functions/command_start.sh

@ -2,7 +2,7 @@
# LGSM command_start.sh function # LGSM command_start.sh function
# Author: Daniel Gibbs # Author: Daniel Gibbs
# Website: http://gameservermanagers.com # Website: http://gameservermanagers.com
lgsm_version="070116" lgsm_version="060516"
# Description: Starts the server. # Description: Starts the server.
@ -10,16 +10,6 @@ local modulename="Starting"
function_selfname="$(basename $(readlink -f "${BASH_SOURCE[0]}"))" function_selfname="$(basename $(readlink -f "${BASH_SOURCE[0]}"))"
fn_start_teamspeak3(){ fn_start_teamspeak3(){
check.sh
info_ts3status.sh
if [ "${ts3status}" != "Server is running" ]; then
# Will check for updates is updateonstart is yes
if [ "${updateonstart}" == "yes" ]||[ "${updateonstart}" == "1" ]||[ "${updateonstart}" == "on" ]; then
update_check.sh
fi
fi
if [ ! -e "${servercfgfullpath}" ]; then if [ ! -e "${servercfgfullpath}" ]; then
fn_print_warn_nl "${servercfgfullpath} is missing" fn_print_warn_nl "${servercfgfullpath} is missing"
fn_scriptlog "${servercfgfullpath} is missing" fn_scriptlog "${servercfgfullpath} is missing"
@ -35,13 +25,11 @@ fn_start_teamspeak3(){
touch "${servercfgfullpath}" touch "${servercfgfullpath}"
fi fi
logs.sh
fn_print_dots "${servername}" fn_print_dots "${servername}"
fn_scriptlog "${servername}" fn_scriptlog "${servername}"
sleep 1 sleep 1
check_status.sh
if [ "${ts3status}" == "Server is running" ]; then if [ "${status}" != "0" ]; then
fn_print_info_nl "${servername} is already running" fn_print_info_nl "${servername} is already running"
fn_scriptlog "${servername} is already running" fn_scriptlog "${servername} is already running"
exit exit
@ -57,8 +45,8 @@ fn_start_teamspeak3(){
./ts3server_startscript.sh start inifile="${servercfgfullpath}" > /dev/null 2>&1 ./ts3server_startscript.sh start inifile="${servercfgfullpath}" > /dev/null 2>&1
fi fi
sleep 1 sleep 1
info_ts3status.sh check_status.sh
if [ "${ts3status}" = "Server seems to have died" ]||[ "${ts3status}" = "No server running (ts3server.pid is missing)" ]; then if [ "${status}" == "0" ]; then
fn_print_fail_nl "Unable to start ${servername}" fn_print_fail_nl "Unable to start ${servername}"
fn_scriptlog "Unable to start ${servername}" fn_scriptlog "Unable to start ${servername}"
echo -e " Check log files: ${rootdir}/log" echo -e " Check log files: ${rootdir}/log"
@ -70,117 +58,126 @@ fn_start_teamspeak3(){
} }
fn_start_tmux(){ fn_start_tmux(){
check.sh fn_print_dots "${servername}"
fix.sh fn_scriptlog "${servername}"
info_config.sh sleep 1
fn_parms
logs.sh
tmuxwc=$(tmux list-sessions 2>&1|awk '{print $1}'|grep -v failed|grep -Ec "^${servicename}:") # Log rotation
# Will check for updates if updateonstart is yes check_status.sh
if [ "${tmuxwc}" -eq 0 ]; then if [ "${status}" == "0" ]; then
if [ "${updateonstart}" == "yes" ]||[ "${updateonstart}" == "1" ]||[ "${updateonstart}" == "on" ]; then fn_scriptlog "Rotating log files"
update_check.sh if [ "${engine}" == "unreal2" ]; then
mv "${gamelog}" "${gamelogdate}"
fi
mv "${scriptlog}" "${scriptlogdate}"
mv "${consolelog}" "${consolelogdate}"
fi fi
fi
fn_print_dots "${servername}"
fn_scriptlog "${servername}"
sleep 1
if [ "${tmuxwc}" -eq 0 ]; then # If server is already running exit
fn_scriptlog "Rotating log files" check_status.sh
if [ "${engine}" == "unreal2" ]; then if [ "${status}" != "0" ]; then
mv "${gamelog}" "${gamelogdate}" fn_print_info_nl "${servername} is already running"
fn_scriptlog "${servername} is already running"
exit
fi fi
mv "${scriptlog}" "${scriptlogdate}"
mv "${consolelog}" "${consolelogdate}"
fi
if [ "${tmuxwc}" -eq 1 ]; then
fn_print_info_nl "${servername} is already running"
fn_scriptlog "${servername} is already running"
exit
fi
# Create lock file # Create lock file
date > "${rootdir}/${lockselfname}" date > "${rootdir}/${lockselfname}"
cd "${executabledir}" cd "${executabledir}"
tmux new-session -d -s "${servicename}" "${executable} ${parms}" 2> "${scriptlogdir}/.${servicename}-tmux-error.tmp" tmux new-session -d -s "${servicename}" "${executable} ${parms}" 2> "${scriptlogdir}/.${servicename}-tmux-error.tmp"
# tmux pipe-pane not supported in tmux versions < 1.6
if [ "$(tmux -V|sed "s/tmux //"|sed -n '1 p'|tr -cd '[:digit:]')" -lt "16" ]; then # tmux pipe-pane not supported in tmux versions < 1.6
echo "Console logging disabled: Tmux => 1.6 required" >> "${consolelog}" if [ "$(tmux -V|sed "s/tmux //"|sed -n '1 p'|tr -cd '[:digit:]')" -lt "16" ]; then
echo "http://gameservermanagers.com/tmux-upgrade" >> "${consolelog}" echo "Console logging disabled: Tmux => 1.6 required" >> "${consolelog}"
echo "Currently installed: $(tmux -V)" >> "${consolelog}" echo "http://gameservermanagers.com/tmux-upgrade" >> "${consolelog}"
elif [ "$(tmux -V|sed "s/tmux //"|sed -n '1 p'|tr -cd '[:digit:]')" -eq "18" ]; then echo "Currently installed: $(tmux -V)" >> "${consolelog}"
echo "Console logging disabled: Bug in tmux 1.8 breaks logging" >> "${consolelog}"
echo "http://gameservermanagers.com/tmux-upgrade" >> "${consolelog}" # Console logging disabled: Bug in tmux 1.8 breaks logging
echo "Currently installed: $(tmux -V)" >> "${consolelog}" elif [ "$(tmux -V|sed "s/tmux //"|sed -n '1 p'|tr -cd '[:digit:]')" -eq "18" ]; then
# Console logging enable or not set echo "Console logging disabled: Bug in tmux 1.8 breaks logging" >> "${consolelog}"
elif [ "${consolelogging}" == "on" ]||[ -z "${consolelogging}" ]; then echo "http://gameservermanagers.com/tmux-upgrade" >> "${consolelog}"
touch "${consolelog}" echo "Currently installed: $(tmux -V)" >> "${consolelog}"
tmux pipe-pane -o -t "${servicename}" "exec cat >> '${consolelog}'"
# Console logging disabled # Console logging enable or not set
elif [ "${consolelogging}" == "off" ]; then elif [ "${consolelogging}" == "on" ]||[ -z "${consolelogging}" ]; then
touch "${consolelog}" touch "${consolelog}"
cat "Console logging disabled by user" >> "{consolelog}" tmux pipe-pane -o -t "${servicename}" "exec cat >> '${consolelog}'"
fn_scriptlog "Console logging disabled by user"
fi # Console logging disabled
sleep 1 elif [ "${consolelogging}" == "off" ]; then
tmuxwc=$(tmux list-sessions 2>&1|awk '{print $1}'|grep -Ec "^${servicename}:") touch "${consolelog}"
# If the server fails to start cat "Console logging disabled by user" >> "{consolelog}"
if [ "${tmuxwc}" -eq 0 ]; then fn_scriptlog "Console logging disabled by user"
fn_print_fail_nl "Unable to start ${servername}" fi
fn_scriptlog "Unable to start ${servername}"
sleep 1 sleep 1
if [ -s "${scriptlogdir}/.${servicename}-tmux-error.tmp" ]; then
fn_print_fail_nl "Unable to start ${servername}: Tmux error:" # If the server fails to start
fn_scriptlog "Tmux error" check_status.sh
echo "" if [ "${status}" == "0" ]; then
echo "Command" fn_print_fail_nl "Unable to start ${servername}"
echo "=================================" fn_scriptlog "Unable to start ${servername}"
echo "tmux new-session -d -s \"${servicename}\" \"${executable} ${parms}\"" | tee -a "${scriptlog}" sleep 1
echo "" if [ -s "${scriptlogdir}/.${servicename}-tmux-error.tmp" ]; then
echo "Error" fn_print_fail_nl "Unable to start ${servername}: Tmux error:"
echo "=================================" fn_scriptlog "Tmux error"
cat "${scriptlogdir}/.${servicename}-tmux-error.tmp" | tee -a "${scriptlog}" echo ""
echo "Command"
# Detected error http://gameservermanagers.com/issues echo "================================="
if [ $(grep -c "Operation not permitted" "${scriptlogdir}/.${servicename}-tmux-error.tmp") ]; then echo "tmux new-session -d -s \"${servicename}\" \"${executable} ${parms}\"" | tee -a "${scriptlog}"
echo "" echo ""
echo "Fix" echo "Error"
echo "=================================" echo "================================="
if [ ! $(grep "tty:" /etc/group|grep "$(whoami)") ]; then cat "${scriptlogdir}/.${servicename}-tmux-error.tmp" | tee -a "${scriptlog}"
echo "$(whoami) is not part of the tty group."
fn_scriptlog "$(whoami) is not part of the tty group." # Detected error http://gameservermanagers.com/issues
group=$(grep tty /etc/group) if [ $(grep -c "Operation not permitted" "${scriptlogdir}/.${servicename}-tmux-error.tmp") ]; then
echo "" echo ""
echo " ${group}" echo "Fix"
fn_scriptlog "${group}" echo "================================="
echo "" if [ ! $(grep "tty:" /etc/group|grep "$(whoami)") ]; then
echo "Run the following command with root privileges." echo "$(whoami) is not part of the tty group."
echo "" fn_scriptlog "$(whoami) is not part of the tty group."
echo " usermod -G tty $(whoami)" group=$(grep tty /etc/group)
echo "" echo ""
echo "http://gameservermanagers.com/tmux-op-perm" echo " ${group}"
fn_scriptlog "http://gameservermanagers.com/tmux-op-perm" fn_scriptlog "${group}"
else echo ""
echo "No known fix currently. Please log an issue." echo "Run the following command with root privileges."
fn_scriptlog "No known fix currently. Please log an issue." echo ""
echo "http://gameservermanagers.com/issues" echo " usermod -G tty $(whoami)"
fn_scriptlog "http://gameservermanagers.com/issues" echo ""
echo "http://gameservermanagers.com/tmux-op-perm"
fn_scriptlog "http://gameservermanagers.com/tmux-op-perm"
else
echo "No known fix currently. Please log an issue."
fn_scriptlog "No known fix currently. Please log an issue."
echo "http://gameservermanagers.com/issues"
fn_scriptlog "http://gameservermanagers.com/issues"
fi
fi fi
fi fi
exit 1
else
fn_print_ok "${servername}"
fn_scriptlog "Started ${servername}"
fi fi
exit 1 rm "${scriptlogdir}/.${servicename}-tmux-error.tmp"
else echo -en "\n"
fn_print_ok "${servername}"
fn_scriptlog "Started ${servername}"
fi
rm "${scriptlogdir}/.${servicename}-tmux-error.tmp"
echo -en "\n"
} }
check.sh
fix.sh
info_config.sh
fn_parms
logs.sh
# Will check for updates is updateonstart is yes
if [ "${status}" == "0" ]; then
if [ "${updateonstart}" == "yes" ]||[ "${updateonstart}" == "1" ]||[ "${updateonstart}" == "on" ]; then
update_check.sh
fi
fi
if [ "${gamename}" == "Teamspeak 3" ]; then if [ "${gamename}" == "Teamspeak 3" ]; then
fn_start_teamspeak3 fn_start_teamspeak3
else else

5
lgsm/functions/command_validate.sh

@ -36,9 +36,8 @@ fix.sh
fn_scriptlog "Checking complete" fn_scriptlog "Checking complete"
} }
check.sh check_status.sh
tmuxwc=$(tmux list-sessions 2>&1|awk '{print $1}'|grep -v failed|grep -Ec "^${servicename}:") if [ "${status}" != "0" ]; then
if [ "${tmuxwc}" -eq 1 ]; then
command_stop.sh command_stop.sh
fn_validation fn_validation
command_start.sh command_start.sh

7
lgsm/functions/core_functions.sh

@ -2,7 +2,7 @@
# LGSM core_functions.sh function # LGSM core_functions.sh function
# Author: Daniel Gibbs # Author: Daniel Gibbs
# Website: http://gameservermanagers.com # Website: http://gameservermanagers.com
lgsm_version="020516" lgsm_version="060516"
# Description: Defines all functions to allow download and execution of functions using fn_fetch_function. # Description: Defines all functions to allow download and execution of functions using fn_fetch_function.
# This function is called first before any other function. Without this file other functions would not load. # This function is called first before any other function. Without this file other functions would not load.
@ -207,6 +207,11 @@ functionfile="${FUNCNAME}"
fn_fetch_function fn_fetch_function
} }
check_status.sh(){
functionfile="${FUNCNAME}"
fn_fetch_function
}
check_steamcmd.sh(){ check_steamcmd.sh(){
functionfile="${FUNCNAME}" functionfile="${FUNCNAME}"
fn_fetch_function fn_fetch_function

491
lgsm/functions/update_check.sh

@ -2,7 +2,7 @@
# LGSM update_check.sh function # LGSM update_check.sh function
# Author: Daniel Gibbs # Author: Daniel Gibbs
# Website: http://gameservermanagers.com # Website: http://gameservermanagers.com
lgsm_version="060216" lgsm_version="060516"
# Description: Checks if a server update is available. # Description: Checks if a server update is available.
@ -17,292 +17,294 @@ fn_appmanifestinfo(){
} }
fn_appmanifestcheck(){ fn_appmanifestcheck(){
fn_appmanifestinfo
# Multiple or no matching appmanifest files may sometimes be available.
# This is an error is corrected below if required.
if [ "${appmanifestfilewc}" -ge "2" ]; then
sleep 1
fn_print_warn "Multiple appmanifest_${appid}.acf files found"
fn_scriptlog "Warning! Multiple appmanifest_${appid}.acf files found"
sleep 2
fn_print_dots "Removing x${appmanifestfilewc} appmanifest_${appid}.acf files"
sleep 1
for appfile in ${appmanifestfile}; do
rm "${appfile}"
done
appmanifestfilewc1="${appmanifestfilewc}"
fn_appmanifestinfo fn_appmanifestinfo
# Multiple or no matching appmanifest files may sometimes be available.
# This is an error is corrected below if required.
if [ "${appmanifestfilewc}" -ge "2" ]; then if [ "${appmanifestfilewc}" -ge "2" ]; then
fn_print_fail "Unable to remove x${appmanifestfilewc} appmanifest_${appid}.acf files"
fn_scriptlog "Failure! Unable to remove x${appmanifestfilewc} appmanifest_${appid}.acf files"
sleep 1 sleep 1
echo "" fn_print_warn "Multiple appmanifest_${appid}.acf files found"
echo " Check user permissions" fn_scriptlog "Warning! Multiple appmanifest_${appid}.acf files found"
sleep 2
fn_print_dots "Removing x${appmanifestfilewc} appmanifest_${appid}.acf files"
sleep 1
for appfile in ${appmanifestfile}; do for appfile in ${appmanifestfile}; do
echo " ${appfile}" rm "${appfile}"
done done
exit 1 appmanifestfilewc1="${appmanifestfilewc}"
else fn_appmanifestinfo
sleep 1 if [ "${appmanifestfilewc}" -ge "2" ]; then
fn_print_ok "Removed x${appmanifestfilewc1} appmanifest_${appid}.acf files" fn_print_fail "Unable to remove x${appmanifestfilewc} appmanifest_${appid}.acf files"
fn_scriptlog "Success! Removed x${appmanifestfilewc1} appmanifest_${appid}.acf files" fn_scriptlog "Failure! Unable to remove x${appmanifestfilewc} appmanifest_${appid}.acf files"
sleep 1 sleep 1
echo ""
echo " Check user permissions"
for appfile in ${appmanifestfile}; do
echo " ${appfile}"
done
exit 1
else
sleep 1
fn_print_ok "Removed x${appmanifestfilewc1} appmanifest_${appid}.acf files"
fn_scriptlog "Success! Removed x${appmanifestfilewc1} appmanifest_${appid}.acf files"
sleep 1
fn_print_info_nl "Forcing update to correct issue"
fn_scriptlog "Forcing update to correct issue"
sleep 1
update_dl.sh
update_check.sh
fi
elif [ "${appmanifestfilewc}" -eq "0" ]; then
if [ "${forceupdate}" == "1" ]; then
fn_print_fail "Still no appmanifest_${appid}.acf found: Unable to update"
fn_scriptlog "Warning! Still no appmanifest_${appid}.acf found: Unable to update"
exit 1
fi
forceupdate=1
fn_print_warn "No appmanifest_${appid}.acf found"
fn_scriptlog "Warning! No appmanifest_${appid}.acf found"
sleep 2
fn_print_info_nl "Forcing update to correct issue" fn_print_info_nl "Forcing update to correct issue"
fn_scriptlog "Forcing update to correct issue" fn_scriptlog "Forcing update to correct issue"
sleep 1 sleep 1
update_dl.sh update_dl.sh
update_check.sh update_check.sh
fi fi
elif [ "${appmanifestfilewc}" -eq "0" ]; then
if [ "${forceupdate}" == "1" ]; then
fn_print_fail "Still no appmanifest_${appid}.acf found: Unable to update"
fn_scriptlog "Warning! Still no appmanifest_${appid}.acf found: Unable to update"
exit 1
fi
forceupdate=1
fn_print_warn "No appmanifest_${appid}.acf found"
fn_scriptlog "Warning! No appmanifest_${appid}.acf found"
sleep 2
fn_print_info_nl "Forcing update to correct issue"
fn_scriptlog "Forcing update to correct issue"
sleep 1
update_dl.sh
update_check.sh
fi
} }
fn_logupdaterequest(){ fn_logupdaterequest(){
# Checks for server update requests from server logs. # Checks for server update requests from server logs.
fn_print_dots "Checking for update: Server logs" fn_print_dots "Checking for update: Server logs"
fn_scriptlog "Checking for update: Server logs" fn_scriptlog "Checking for update: Server logs"
sleep 1
requestrestart=$(grep -Ec "MasterRequestRestart" "${consolelog}")
if [ "${requestrestart}" -ge "1" ]; then
fn_print_ok_nl "Checking for update: Server logs: Update requested"
sleep 1
echo ""
echo -ne "Applying update.\r"
sleep 1 sleep 1
echo -ne "Applying update..\r" requestrestart=$(grep -Ec "MasterRequestRestart" "${consolelog}")
sleep 1 if [ "${requestrestart}" -ge "1" ]; then
echo -ne "Applying update...\r" fn_print_ok_nl "Checking for update: Server logs: Update requested"
sleep 1 sleep 1
echo -ne "\n" echo ""
tmuxwc=$(tmux list-sessions 2>&1|awk '{print $1}'|grep -v failed|grep -Ec "^${servicename}:") echo -ne "Applying update.\r"
unset updateonstart sleep 1
if [ "${tmuxwc}" -eq 1 ]; then echo -ne "Applying update..\r"
command_stop.sh sleep 1
update_dl.sh echo -ne "Applying update...\r"
command_start.sh sleep 1
echo -ne "\n"
unset updateonstart
check_status.sh
if [ "${status}" != "0" ]; then
command_stop.sh
update_dl.sh
command_start.sh
else
update_dl.sh
fi
else else
update_dl.sh fn_print_ok "Checking for update: Server logs: No update requested"
sleep 1
fi fi
else
fn_print_ok "Checking for update: Server logs: No update requested"
sleep 1
fi
} }
fn_steamcmdcheck(){ fn_steamcmdcheck(){
fn_appmanifestcheck fn_appmanifestcheck
# Checks for server update from SteamCMD # Checks for server update from SteamCMD
fn_print_dots "Checking for update: SteamCMD" fn_print_dots "Checking for update: SteamCMD"
fn_scriptlog "Checking for update: SteamCMD" fn_scriptlog "Checking for update: SteamCMD"
sleep 1 sleep 1
# Gets currentbuild # Gets currentbuild
currentbuild=$(grep buildid "${appmanifestfile}" | tr '[:blank:]"' ' ' | tr -s ' ' | cut -d\ -f3) currentbuild=$(grep buildid "${appmanifestfile}" | tr '[:blank:]"' ' ' | tr -s ' ' | cut -d\ -f3)
# Removes appinfo.vdf as a fix for not always getting up to date version info from SteamCMD # Removes appinfo.vdf as a fix for not always getting up to date version info from SteamCMD
# Gets availablebuild info # Gets availablebuild info
cd "${rootdir}/steamcmd" cd "${rootdir}/steamcmd"
if [ -f "${HOME}/Steam/appcache/appinfo.vdf" ]; then if [ -f "${HOME}/Steam/appcache/appinfo.vdf" ]; then
rm -f "${HOME}/Steam/appcache/appinfo.vdf" rm -f "${HOME}/Steam/appcache/appinfo.vdf"
fi fi
availablebuild=$(./steamcmd.sh +login "${steamuser}" "${steampass}" +app_info_update 1 +app_info_print "${appid}" +app_info_print "${appid}" +quit | grep -EA 1000 "^\s+\"branches\"$" | grep -EA 5 "^\s+\"public\"$" | grep -m 1 -EB 10 "^\s+}$" | grep -E "^\s+\"buildid\"\s+" | tr '[:blank:]"' ' ' | tr -s ' ' | cut -d\ -f3) availablebuild=$(./steamcmd.sh +login "${steamuser}" "${steampass}" +app_info_update 1 +app_info_print "${appid}" +app_info_print "${appid}" +quit | grep -EA 1000 "^\s+\"branches\"$" | grep -EA 5 "^\s+\"public\"$" | grep -m 1 -EB 10 "^\s+}$" | grep -E "^\s+\"buildid\"\s+" | tr '[:blank:]"' ' ' | tr -s ' ' | cut -d\ -f3)
if [ -z "${availablebuild}" ]; then if [ -z "${availablebuild}" ]; then
fn_print_fail "Checking for update: SteamCMD" fn_print_fail "Checking for update: SteamCMD"
fn_scriptlog "Failure! Checking for update: SteamCMD" fn_scriptlog "Failure! Checking for update: SteamCMD"
sleep 1 sleep 1
fn_print_fail_nl "Checking for update: SteamCMD: Not returning version info" fn_print_fail_nl "Checking for update: SteamCMD: Not returning version info"
fn_scriptlog "Failure! Checking for update: SteamCMD: Not returning version info" fn_scriptlog "Failure! Checking for update: SteamCMD: Not returning version info"
exit 1 exit 1
else else
fn_print_ok "Checking for update: SteamCMD" fn_print_ok "Checking for update: SteamCMD"
fn_scriptlog "Success! Checking for update: SteamCMD" fn_scriptlog "Success! Checking for update: SteamCMD"
sleep 1 sleep 1
fi fi
if [ "${currentbuild}" != "${availablebuild}" ]; then if [ "${currentbuild}" != "${availablebuild}" ]; then
echo -e "\n" echo -e "\n"
echo -e "Update available:" echo -e "Update available:"
sleep 1 sleep 1
echo -e " Current build: \e[0;31m${currentbuild}\e[0;39m" echo -e " Current build: \e[0;31m${currentbuild}\e[0;39m"
echo -e " Available build: \e[0;32m${availablebuild}\e[0;39m" echo -e " Available build: \e[0;32m${availablebuild}\e[0;39m"
echo -e "" echo -e ""
echo -e " https://steamdb.info/app/${appid}/" echo -e " https://steamdb.info/app/${appid}/"
sleep 1 sleep 1
echo "" echo ""
echo -en "Applying update.\r" echo -en "Applying update.\r"
sleep 1 sleep 1
echo -en "Applying update..\r" echo -en "Applying update..\r"
sleep 1 sleep 1
echo -en "Applying update...\r" echo -en "Applying update...\r"
sleep 1 sleep 1
echo -en "\n" echo -en "\n"
fn_scriptlog "Update available" fn_scriptlog "Update available"
fn_scriptlog "Current build: ${currentbuild}" fn_scriptlog "Current build: ${currentbuild}"
fn_scriptlog "Available build: ${availablebuild}" fn_scriptlog "Available build: ${availablebuild}"
fn_scriptlog "${currentbuild} > ${availablebuild}" fn_scriptlog "${currentbuild} > ${availablebuild}"
tmuxwc=$(tmux list-sessions 2>&1|awk '{print $1}'|grep -v failed|grep -Ec "^${servicename}:") unset updateonstart
unset updateonstart info_status.sh
if [ "${tmuxwc}" -eq 1 ]; then if [ "${status}" != "0" ]; then
command_stop.sh command_stop.sh
update_dl.sh update_dl.sh
command_start.sh command_start.sh
else
update_dl.sh
fi
else else
update_dl.sh echo -e "\n"
echo -e "No update available:"
echo -e " Current version: \e[0;32m${currentbuild}\e[0;39m"
echo -e " Available version: \e[0;32m${availablebuild}\e[0;39m"
echo -e " https://steamdb.info/app/${appid}/"
echo -e ""
fn_print_ok_nl "No update available"
fn_scriptlog "Current build: ${currentbuild}"
fn_scriptlog "Available build: ${availablebuild}"
fi fi
else
echo -e "\n"
echo -e "No update available:"
echo -e " Current version: \e[0;32m${currentbuild}\e[0;39m"
echo -e " Available version: \e[0;32m${availablebuild}\e[0;39m"
echo -e " https://steamdb.info/app/${appid}/"
echo -e ""
fn_print_ok_nl "No update available"
fn_scriptlog "Current build: ${currentbuild}"
fn_scriptlog "Available build: ${availablebuild}"
fi
} }
### END SteamCMD Update Checker ### ### END SteamCMD Update Checker ###
fn_teamspeak3_check(){ fn_teamspeak3_check(){
# Checks for server update from teamspeak.com using a mirror dl.4players.de # Checks for server update from teamspeak.com using a mirror dl.4players.de
fn_print_dots "Checking for update: teamspeak.com" fn_print_dots "Checking for update: teamspeak.com"
fn_scriptlog "Checking for update: teamspeak.com" fn_scriptlog "Checking for update: teamspeak.com"
sleep 1
# Gets currentbuild info
# Checks currentbuild info is available, if fails a server restart will be forced to generate logs
if [ -z "$(find ./* -name 'ts3server*_0.log')" ]; then
fn_print_fail "Checking for update: teamspeak.com"
sleep 1 sleep 1
fn_print_fail_nl "Checking for update: teamspeak.com: No logs with server version found"
fn_scriptlog "Failure! Checking for update: teamspeak.com: No logs with server version found" # Gets currentbuild info
sleep 2 # Checks currentbuild info is available, if fails a server restart will be forced to generate logs
fn_print_info_nl "Checking for update: teamspeak.com: Forcing server restart"
fn_scriptlog "Checking for update: teamspeak.com: Forcing server restart"
sleep 2
command_stop.sh
command_start.sh
sleep 2
# If still failing will exit
if [ -z "$(find ./* -name 'ts3server*_0.log')" ]; then if [ -z "$(find ./* -name 'ts3server*_0.log')" ]; then
fn_print_fail_nl "Checking for update: teamspeak.com: Still No logs with server version found" fn_print_fail "Checking for update: teamspeak.com"
fn_scriptlog "Failure! Checking for update: teamspeak.com: Still No logs with server version found" sleep 1
exit 1 fn_print_fail_nl "Checking for update: teamspeak.com: No logs with server version found"
fn_scriptlog "Failure! Checking for update: teamspeak.com: No logs with server version found"
sleep 2
fn_print_info_nl "Checking for update: teamspeak.com: Forcing server restart"
fn_scriptlog "Checking for update: teamspeak.com: Forcing server restart"
sleep 2
command_stop.sh
command_start.sh
sleep 2
# If still failing will exit
if [ -z "$(find ./* -name 'ts3server*_0.log')" ]; then
fn_print_fail_nl "Checking for update: teamspeak.com: Still No logs with server version found"
fn_scriptlog "Failure! Checking for update: teamspeak.com: Still No logs with server version found"
exit 1
fi
fi fi
fi currentbuild=$(cat $(find ./* -name 'ts3server*_0.log' 2> /dev/null | sort | egrep -E -v '${rootdir}/.ts3version' | tail -1) | egrep -o 'TeamSpeak 3 Server ((\.)?[0-9]{1,3}){1,3}\.[0-9]{1,3}' | egrep -o '((\.)?[0-9]{1,3}){1,3}\.[0-9]{1,3}')
currentbuild=$(cat $(find ./* -name 'ts3server*_0.log' 2> /dev/null | sort | egrep -E -v '${rootdir}/.ts3version' | tail -1) | egrep -o 'TeamSpeak 3 Server ((\.)?[0-9]{1,3}){1,3}\.[0-9]{1,3}' | egrep -o '((\.)?[0-9]{1,3}){1,3}\.[0-9]{1,3}')
# Gets the teamspeak server architecture # Gets the teamspeak server architecture
info_distro.sh info_distro.sh
if [ "${arch}" == "x86_64" ]; then if [ "${arch}" == "x86_64" ]; then
ts3arch="amd64" ts3arch="amd64"
elif [ "${arch}" == "i386" ]||[ "${arch}" == "i686" ]; then elif [ "${arch}" == "i386" ]||[ "${arch}" == "i686" ]; then
ts3arch="x86" ts3arch="x86"
else else
echo "" echo ""
fn_print_failure "${arch} is an unsupported architecture" fn_print_failure "${arch} is an unsupported architecture"
exit 1 exit 1
fi fi
# Gets availablebuild info # Gets availablebuild info
# Grabs all version numbers but not in correct order # Grabs all version numbers but not in correct order
wget "http://dl.4players.de/ts/releases/?C=M;O=D" -q -O -| grep -i dir | egrep -o '<a href=\".*\/\">.*\/<\/a>' | egrep -o '[0-9\.?]+'|uniq > .ts3_version_numbers_unsorted.tmp wget "http://dl.4players.de/ts/releases/?C=M;O=D" -q -O -| grep -i dir | egrep -o '<a href=\".*\/\">.*\/<\/a>' | egrep -o '[0-9\.?]+'|uniq > .ts3_version_numbers_unsorted.tmp
# Sort version numbers # Sort version numbers
cat .ts3_version_numbers_unsorted.tmp | sort -r --version-sort -o .ts3_version_numbers_sorted.tmp cat .ts3_version_numbers_unsorted.tmp | sort -r --version-sort -o .ts3_version_numbers_sorted.tmp
# Finds directory with most recent server version. # Finds directory with most recent server version.
while read ts3_version_number; do while read ts3_version_number; do
wget --spider -q "http://dl.4players.de/ts/releases/${ts3_version_number}/teamspeak3-server_linux_${ts3arch}-${ts3_version_number}.tar.bz2" wget --spider -q "http://dl.4players.de/ts/releases/${ts3_version_number}/teamspeak3-server_linux_${ts3arch}-${ts3_version_number}.tar.bz2"
if [ $? -eq 0 ]; then if [ $? -eq 0 ]; then
availablebuild="${ts3_version_number}" availablebuild="${ts3_version_number}"
# Break while-loop, if the latest release could be found # Break while-loop, if the latest release could be found
break break
fi fi
done < .ts3_version_numbers_sorted.tmp done < .ts3_version_numbers_sorted.tmp
# Tidy up # Tidy up
rm -f ".ts3_version_numbers_unsorted.tmp" rm -f ".ts3_version_numbers_unsorted.tmp"
rm -f ".ts3_version_numbers_sorted.tmp" rm -f ".ts3_version_numbers_sorted.tmp"
# Checks availablebuild info is available # Checks availablebuild info is available
if [ -z "${availablebuild}" ]; then if [ -z "${availablebuild}" ]; then
fn_print_fail "Checking for update: teamspeak.com" fn_print_fail "Checking for update: teamspeak.com"
fn_scriptlog "Checking for update: teamspeak.com" fn_scriptlog "Checking for update: teamspeak.com"
sleep 1 sleep 1
fn_print_fail "Checking for update: teamspeak.com: Not returning version info" fn_print_fail "Checking for update: teamspeak.com: Not returning version info"
fn_scriptlog "Failure! Checking for update: teamspeak.com: Not returning version info" fn_scriptlog "Failure! Checking for update: teamspeak.com: Not returning version info"
sleep 2 sleep 2
exit 1 exit 1
else else
fn_print_ok "Checking for update: teamspeak.com" fn_print_ok "Checking for update: teamspeak.com"
fn_scriptlog "Success! Checking for update: teamspeak.com" fn_scriptlog "Success! Checking for update: teamspeak.com"
sleep 1 sleep 1
fi fi
# Removes dots so if can compare version numbers # Removes dots so if can compare version numbers
currentbuilddigit=$(echo "${currentbuild}"|tr -cd '[:digit:]') currentbuilddigit=$(echo "${currentbuild}"|tr -cd '[:digit:]')
availablebuilddigit=$(echo "${availablebuild}"|tr -cd '[:digit:]') availablebuilddigit=$(echo "${availablebuild}"|tr -cd '[:digit:]')
if [ "${currentbuilddigit}" -ne "${availablebuilddigit}" ]; then if [ "${currentbuilddigit}" -ne "${availablebuilddigit}" ]; then
echo -e "\n" echo -e "\n"
echo -e "Update available:" echo -e "Update available:"
sleep 1 sleep 1
echo -e " Current build: \e[0;31m${currentbuild} ${architecture}\e[0;39m" echo -e " Current build: \e[0;31m${currentbuild} ${architecture}\e[0;39m"
echo -e " Available build: \e[0;32m${availablebuild} ${architecture}\e[0;39m" echo -e " Available build: \e[0;32m${availablebuild} ${architecture}\e[0;39m"
echo -e "" echo -e ""
sleep 1 sleep 1
echo "" echo ""
echo -en "Applying update.\r" echo -en "Applying update.\r"
sleep 1 sleep 1
echo -en "Applying update..\r" echo -en "Applying update..\r"
sleep 1 sleep 1
echo -en "Applying update...\r" echo -en "Applying update...\r"
sleep 1 sleep 1
echo -en "\n" echo -en "\n"
fn_scriptlog "Update available" fn_scriptlog "Update available"
fn_scriptlog "Current build: ${currentbuild}" fn_scriptlog "Current build: ${currentbuild}"
fn_scriptlog "Available build: ${availablebuild}" fn_scriptlog "Available build: ${availablebuild}"
fn_scriptlog "${currentbuild} > ${availablebuild}" fn_scriptlog "${currentbuild} > ${availablebuild}"
unset updateonstart
info_ts3status.sh unset updateonstart
if [ "${ts3status}" = "No server running (ts3server.pid is missing)" ]; then check_status.sh
update_dl.sh if [ "${status}" == "0" ]; then
command_start.sh update_dl.sh
sleep 5 command_start.sh
command_stop.sh sleep 5
command_stop.sh
else
command_stop.sh
update_dl.sh
command_start.sh
fi
else else
command_stop.sh echo -e "\n"
update_dl.sh echo -e "No update available:"
command_start.sh echo -e " Current version: \e[0;32m${currentbuild}\e[0;39m"
echo -e " Available version: \e[0;32m${availablebuild}\e[0;39m"
echo -e ""
fn_print_ok_nl "No update available"
fn_scriptlog "Current build: ${currentbuild}"
fn_scriptlog "Available build: ${availablebuild}"
fi fi
else
echo -e "\n"
echo -e "No update available:"
echo -e " Current version: \e[0;32m${currentbuild}\e[0;39m"
echo -e " Available version: \e[0;32m${availablebuild}\e[0;39m"
echo -e ""
fn_print_ok_nl "No update available"
fn_scriptlog "Current build: ${currentbuild}"
fn_scriptlog "Available build: ${availablebuild}"
fi
} }
check.sh check.sh
@ -312,8 +314,7 @@ if [ "${gamename}" == "Teamspeak 3" ]; then
elif [ "${engine}" == "goldsource" ]||[ "${forceupdate}" == "1" ]; then elif [ "${engine}" == "goldsource" ]||[ "${forceupdate}" == "1" ]; then
# Goldsource servers bypass checks as fn_steamcmdcheck does not work for appid 90 servers. # Goldsource servers bypass checks as fn_steamcmdcheck does not work for appid 90 servers.
# forceupdate bypasses checks # forceupdate bypasses checks
tmuxwc=$(tmux list-sessions 2>&1|awk '{print $1}'|grep -v failed|grep -Ec "^${servicename}:") if [ "${status}" != "0" ]; then
if [ "${tmuxwc}" -eq 1 ]; then
command_stop.sh command_stop.sh
update_dl.sh update_dl.sh
command_start.sh command_start.sh

Loading…
Cancel
Save