Explorar o código

Added error checking for SDTD shutdown

Daniel Gibbs %!s(int64=11) %!d(string=hai) anos
pai
achega
c081adbe22
Modificáronse 1 ficheiros con 88 adicións e 36 borrados
  1. 88 36
      functions/fn_stop

+ 88 - 36
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