diff --git a/functions/fn_stop b/functions/fn_stop index a57899cd9..04046ce3f 100644 --- a/functions/fn_stop +++ b/functions/fn_stop @@ -37,23 +37,45 @@ fn_printdots "${servername}" fn_scriptlog "${servername}" sleep 1 fn_check_tmux -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" + +if [ "${gamename}" == "7 Days To Die" ] ; then + # if game is 7 Days To Die, we need special, graceful shutdown via telnet connection. + # Set below variable to be called for expect to operate correctly.. + + 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" + ') + echo -en "\n ${sdtdshutdown}" + fn_printok "${servername}" + fn_scriptlog "Performmed graceful shutdown of ${servername}" 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 -# Remove lock file -rm -f "${rootdir}/${lockselfname}" -sleep 1 -echo -en "\n" -} if [ "${gamename}" == "Teamspeak 3" ]; then fn_stop_teamspeak3 else fn_stop_tmux -fi \ No newline at end of file +fi