fn_stop 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. #!/bin/bash
  2. # LGSM fn_stop function
  3. # Author: Daniel Gibbs
  4. # Website: http://gameservermanagers.com
  5. # Version: 180615
  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. fn_check_root
  29. fn_check_systemdir
  30. fn_printdots "${servername}"
  31. fn_scriptlog "${servername}"
  32. sleep 1
  33. fn_check_ts3status
  34. if [ "${ts3status}" = "No server running (ts3server.pid is missing)" ];then
  35. fn_printfail "${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_printok "${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. fn_check_root
  49. fn_check_systemdir
  50. fn_details_config
  51. fn_printdots "${servername}"
  52. fn_scriptlog "${servername}"
  53. sleep 1
  54. fn_check_tmux
  55. if [ "${gamename}" == "7 Days To Die" ] ; then
  56. # if game is 7 Days To Die, we need special, graceful shutdown via telnet connection.
  57. # Set below variable to be called for expect to operate correctly..
  58. fn_printdots "Attempting graceful shutdown via telnet"
  59. fn_scriptlog "Attempting graceful shutdown via telnet"
  60. sleep 1
  61. telnetip=127.0.0.1
  62. sdtd_telnet
  63. # If failed using localhost will use servers ip
  64. refused=$(echo -en "\n ${sdtdshutdown}"| grep "Timeout or EOF")
  65. if [ -n "${refused}" ]; then
  66. fn_check_ip
  67. telnetip=${ip}
  68. fn_printwarn "Attempting graceful shutdown via telnet: localhost failed"
  69. fn_scriptlog "Warning! Attempting graceful shutdown failed using localhost"
  70. sleep 5
  71. echo -en "\n"
  72. fn_printdots "Attempting graceful shutdown via telnet: using ${telnetip}"
  73. fn_scriptlog "Attempting graceful shutdown via telnet using ${telnetip}"
  74. sdtd_telnet
  75. sleep 1
  76. fi
  77. refused=$(echo -en "\n ${sdtdshutdown}"| grep "Timeout or EOF")
  78. completed=$(echo -en "\n ${sdtdshutdown}"| grep "Completed.")
  79. if [ -n "${refused}" ]; then
  80. fn_printfail "Attempting graceful shutdown via telnet"
  81. fn_scriptlog "Attempting graceful shutdown failed"
  82. fn_scriptlog "${refused}"
  83. elif [ -n "${completed}" ]; then
  84. fn_printok "Attempting graceful shutdown via telnet"
  85. fn_scriptlog "Attempting graceful shutdown succeeded"
  86. else
  87. fn_printfail "Attempting graceful shutdown via telnet: Unknown error"
  88. fn_scriptlog "Attempting graceful shutdown failed"
  89. fn_scriptlog "Unknown error"
  90. fi
  91. sleep 1
  92. echo -en "\n\n"
  93. echo -en "Telnet output:"
  94. echo -en "\n ${sdtdshutdown}"
  95. echo -en "\n\n"
  96. sleep 1
  97. fn_printdots "${servername}"
  98. fn_scriptlog "${servername}"
  99. sleep 5
  100. pid=$(tmux list-sessions 2>&1|awk '{print $1}'|grep -Ec "^${servicename}:")
  101. if [ "${pid}" == "0" ]; then
  102. fn_printok "${servername} is already stopped using graceful shutdown"
  103. fn_scriptlog "${servername} is already stopped using graceful shutdown"
  104. else
  105. tmux kill-session -t "${servicename}"
  106. fn_printok "${servername}"
  107. fn_scriptlog "Stopped ${servername}"
  108. fi
  109. else
  110. pid=$(tmux list-sessions 2>&1|awk '{print $1}'|grep -Ec "^${servicename}:")
  111. if [ "${pid}" == "0" ]; then
  112. fn_printfail "${servername} is already stopped"
  113. fn_scriptlog "${servername} is already stopped"
  114. else
  115. tmux kill-session -t "${servicename}"
  116. fn_printok "${servername}"
  117. fn_scriptlog "Stopped ${servername}"
  118. fi
  119. fi
  120. # Remove lock file
  121. rm -f "${rootdir}/${lockselfname}"
  122. sleep 1
  123. echo -en "\n"
  124. }
  125. if [ "${gamename}" == "Teamspeak 3" ]; then
  126. fn_stop_teamspeak3
  127. else
  128. fn_stop_tmux
  129. fi