command_stop.sh 5.0 KB

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