From c081adbe22f555c1f586e81b0bb02ab67fdce77c Mon Sep 17 00:00:00 2001 From: Daniel Gibbs Date: Thu, 23 Apr 2015 14:26:16 +0100 Subject: [PATCH] Added error checking for SDTD shutdown --- functions/fn_stop | 124 ++++++++++++++++++++++++++++++++-------------- 1 file changed, 88 insertions(+), 36 deletions(-) diff --git a/functions/fn_stop b/functions/fn_stop index 653841148..92541c7f0 100644 --- a/functions/fn_stop +++ b/functions/fn_stop @@ -8,6 +8,27 @@ local modulename="Stopping" +sdtd_telnet(){ + sdtdshutdown=$( expect -c ' + proc abort {} { + puts "Timeout or EOF\n" + exit 1 + } + spawn telnet '"${telnetip}"' '"${telnetport}"' + expect { + "password:" { send "'"${telnetpass}"'\r" } + default abort + } + expect { + "session." { send "shutdown\r" } + default abort + } + expect { eof } + puts "Completed.\n" + ') +} + + fn_stop_teamspeak3(){ fn_check_root fn_check_systemdir @@ -16,12 +37,12 @@ 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" + 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}" + ${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}" @@ -44,45 +65,76 @@ if [ "${gamename}" == "7 Days To Die" ] ; then fn_printdots "Attempting graceful shutdown via telnet" fn_scriptlog "Attempting graceful shutdown via telnet" sleep 1 + + telnetip=127.0.0.1 - sdtdshutdown=$( expect -c ' - proc abort {} { - puts "Timeout or EOF\n" - exit 1 - } - spawn telnet '"${telnetip}"' '"${telnetport}"' - expect { - "password:" { send "'"${telnetpass}"'\r" } - default abort - } - expect { - "session." { send "shutdown\r" } - default abort - } - expect { eof } - puts "Completed.\n" - ') + sdtd_telnet + + # If failed using localhost will use servers ip + refused=$(echo -en "\n ${sdtdshutdown}"| grep "Timeout or EOF") + if [ -n "${refused}" ]; then + fn_check_ip + telnetip=${ip} + fn_printwarn "Attempting graceful shutdown via telnet: localhost failed" + fn_scriptlog "Warning! Attempting graceful shutdown failed using localhost" + sleep 5 + echo -en "\n" + fn_printdots "Attempting graceful shutdown via telnet: using ${telnetip}" + fn_scriptlog "Attempting graceful shutdown via telnet using ${telnetip}" + sdtd_telnet + sleep 1 + fi + + refused=$(echo -en "\n ${sdtdshutdown}"| grep "Timeout or EOF") + completed=$(echo -en "\n ${sdtdshutdown}"| grep "Completed.") + if [ -n "${refused}" ]; then + fn_printfail "Attempting graceful shutdown via telnet" + fn_scriptlog "Attempting graceful shutdown failed" + fn_scriptlog "${refused}" + elif [ -n "${completed}" ]; then + fn_printok "Attempting graceful shutdown via telnet" + fn_scriptlog "Attempting graceful shutdown succeeded" + else + fn_printfail "Attempting graceful shutdown via telnet: Unknown error" + fn_scriptlog "Attempting graceful shutdown failed" + fn_scriptlog "Unknown error" + fi + sleep 1 + echo -en "\n\n" + echo -en "Telnet output:" echo -en "\n ${sdtdshutdown}" - fn_printok "Attempting graceful shutdown via telnet" - fn_scriptlog "Attempting graceful shutdown succeeded" + echo -en "\n\n" sleep 1 fn_printdots "${servername}" fn_scriptlog "${servername}" - sleep 1 -fi -pid=$(tmux list-sessions 2>&1|awk '{print $1}'|grep -Ec "^${servicename}:") -if [ "${pid}" == "0" ]; then - fn_printfail "${servername} is already stopped" - fn_scriptlog "${servername} is already stopped" + sleep 5 + pid=$(tmux list-sessions 2>&1|awk '{print $1}'|grep -Ec "^${servicename}:") + if [ "${pid}" == "0" ]; then + fn_printok "${servername} is already stopped using graceful shutdown" + fn_scriptlog "${servername} is already stopped using graceful shutdown" + else + tmux kill-session -t ${servicename} + fn_printok "${servername}" + fn_scriptlog "Stopped ${servername}" + fi + else - tmux kill-session -t ${servicename} - fn_printok "${servername}" - fn_scriptlog "Stopped ${servername}" + pid=$(tmux list-sessions 2>&1|awk '{print $1}'|grep -Ec "^${servicename}:") + if [ "${pid}" == "0" ]; then + fn_printfail "${servername} is already stopped" + fn_scriptlog "${servername} is already stopped" + else + tmux kill-session -t ${servicename} + fn_printok "${servername}" + fn_scriptlog "Stopped ${servername}" + fi fi + sleep 1 + echo -en "\n" } if [ "${gamename}" == "Teamspeak 3" ]; then - fn_stop_teamspeak3 + fn_stop_teamspeak3 else - fn_stop_tmux -fi + fn_stop_tmux +fi \ No newline at end of file