command_stop.sh 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. #!/bin/bash
  2. # LGSM command_stop.sh function
  3. # Author: Daniel Gibbs
  4. # Website: http://gameservermanagers.com
  5. lgsm_version="271215"
  6. # Description: Stops the server.
  7. local modulename="Stopping"
  8. sdtd_telnet(){
  9. sdtdshutdown=$( expect -c '
  10. proc abort {} {
  11. puts "Timeout or EOF\n"
  12. exit 1
  13. }
  14. spawn telnet '"${telnetip}"' '"${telnetport}"'
  15. expect {
  16. "password:" { send "'"${telnetpass}"'\r" }
  17. default abort
  18. }
  19. expect {
  20. "session." { send "shutdown\r" }
  21. default abort
  22. }
  23. expect { eof }
  24. puts "Completed.\n"
  25. ')
  26. }
  27. fn_stop_teamspeak3(){
  28. check.sh
  29. fn_printdots "${servername}"
  30. fn_scriptlog "${servername}"
  31. sleep 1
  32. info_ts3status.sh
  33. if [ "${ts3status}" = "No server running (ts3server.pid is missing)" ]; then
  34. fn_printfail "${servername} is already stopped"
  35. fn_scriptlog "${servername} is already stopped"
  36. else
  37. ${filesdir}/ts3server_startscript.sh stop > /dev/null 2>&1
  38. fn_printok "${servername}"
  39. fn_scriptlog "Stopped ${servername}"
  40. fi
  41. # Remove lock file
  42. rm -f "${rootdir}/${lockselfname}"
  43. sleep 1
  44. echo -en "\n"
  45. }
  46. fn_stop_tmux(){
  47. check.sh
  48. info_config.sh
  49. fn_printdots "${servername}"
  50. fn_scriptlog "${servername}"
  51. sleep 1
  52. if [ "${gamename}" == "7 Days To Die" ] ; then
  53. # if game is 7 Days To Die, we need special, graceful shutdown via telnet connection.
  54. # Set below variable to be called for expect to operate correctly..
  55. fn_printdots "Attempting graceful shutdown via telnet"
  56. fn_scriptlog "Attempting graceful shutdown via telnet"
  57. sleep 1
  58. telnetip=127.0.0.1
  59. sdtd_telnet
  60. # If failed using localhost will use servers ip
  61. refused=$(echo -en "\n ${sdtdshutdown}"| grep "Timeout or EOF")
  62. if [ -n "${refused}" ]; then
  63. telnetip=${ip}
  64. fn_printwarn "Attempting graceful shutdown via telnet: localhost failed"
  65. fn_scriptlog "Warning! Attempting graceful shutdown failed using localhost"
  66. sleep 5
  67. echo -en "\n"
  68. fn_printdots "Attempting graceful shutdown via telnet: using ${telnetip}"
  69. fn_scriptlog "Attempting graceful shutdown via telnet using ${telnetip}"
  70. sdtd_telnet
  71. sleep 1
  72. fi
  73. refused=$(echo -en "\n ${sdtdshutdown}"| grep "Timeout or EOF")
  74. completed=$(echo -en "\n ${sdtdshutdown}"| grep "Completed.")
  75. if [ -n "${refused}" ]; then
  76. fn_printfail "Attempting graceful shutdown via telnet"
  77. fn_scriptlog "Attempting graceful shutdown failed"
  78. fn_scriptlog "${refused}"
  79. elif [ -n "${completed}" ]; then
  80. fn_printok "Attempting graceful shutdown via telnet"
  81. fn_scriptlog "Attempting graceful shutdown succeeded"
  82. else
  83. fn_printfail "Attempting graceful shutdown via telnet: Unknown error"
  84. fn_scriptlog "Attempting graceful shutdown failed"
  85. fn_scriptlog "Unknown error"
  86. fi
  87. sleep 1
  88. echo -en "\n\n"
  89. echo -en "Telnet output:"
  90. echo -en "\n ${sdtdshutdown}"
  91. echo -en "\n\n"
  92. sleep 1
  93. fn_printdots "${servername}"
  94. fn_scriptlog "${servername}"
  95. sleep 5
  96. pid=$(tmux list-sessions 2>&1|awk '{print $1}'|grep -Ec "^${servicename}:")
  97. if [ "${pid}" == "0" ]; then
  98. fn_printok "${servername} is already stopped using graceful shutdown"
  99. fn_scriptlog "${servername} is already stopped using graceful shutdown"
  100. else
  101. tmux kill-session -t "${servicename}"
  102. fn_printok "${servername}"
  103. fn_scriptlog "Stopped ${servername}"
  104. fi
  105. else
  106. pid=$(tmux list-sessions 2>&1|awk '{print $1}'|grep -Ec "^${servicename}:")
  107. if [ "${pid}" == "0" ]; then
  108. fn_printfail "${servername} is already stopped"
  109. fn_scriptlog "${servername} is already stopped"
  110. else
  111. if [ "${engine}" == "source" ]||[ "${engine}" == "goldsource" ]; then
  112. sleep 1
  113. fn_printdots "Attempting graceful shutdown"
  114. fn_scriptlog "Attempting graceful shutdown"
  115. tmux send -t "${servicename}" quit ENTER > /dev/null 2>&1
  116. counter=0
  117. while [ "${pid}" != "0" -a $counter -lt 30 ]; do
  118. pid=$(tmux list-sessions 2>&1|awk '{print $1}'|grep -Ec "^${servicename}:")
  119. sleep 1
  120. let counter=counter+1
  121. if [ "${counter}" -gt "1" ]; then
  122. fn_printdots "Attempting graceful shutdown: ${counter}"
  123. fi
  124. done
  125. pid=$(tmux list-sessions 2>&1|awk '{print $1}'|grep -Ec "^${servicename}:")
  126. if [ "${pid}" == "0" ]; then
  127. fn_printok "Attempting graceful shutdown"
  128. else
  129. fn_printfail "Attempting graceful shutdown"
  130. fi
  131. fi
  132. tmux kill-session -t "${servicename}" > /dev/null 2>&1
  133. fn_printok "${servername}"
  134. fn_scriptlog "Stopped ${servername}"
  135. fi
  136. fi
  137. # Remove lock file
  138. rm -f "${rootdir}/${lockselfname}"
  139. sleep 1
  140. echo -en "\n"
  141. }
  142. if [ "${gamename}" == "Teamspeak 3" ]; then
  143. fn_stop_teamspeak3
  144. else
  145. fn_stop_tmux
  146. fi