monitor_gsquery.sh 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. #!/bin/bash
  2. # LGSM monitor_gsquery.sh function
  3. # Author: Daniel Gibbs
  4. # Website: http://gameservermanagers.com
  5. lgsm_version="270216"
  6. # Description: uses gsquery.py to query the server port.
  7. # Detects if the server has frozen with the proccess still running.
  8. local modulename="Monitor"
  9. # Forces legecy servers to use gsquery as vat gsquery is not present in legecy
  10. if [ -z "${gsquery}" ]; then
  11. gsquery="yes"
  12. fi
  13. if [ "${gsquery}" == "yes" ]; then
  14. # Downloads gsquery.py if missing
  15. if [ ! -f "${functionsdir}/gsquery.py" ]; then
  16. fn_fetch_file_github "functions" "gsquery.py" "${functionsdir}" "executecmd" "norun" "noforce" "nomd5"
  17. fi
  18. info_config.sh
  19. if [ "${engine}" == "unreal" ]||[ "${engine}" == "unreal2" ]; then
  20. port=$((port + 1))
  21. elif [ "${engine}" == "spark" ]; then
  22. port=$((port + 1))
  23. fi
  24. if [ -z "${queryport}" ]; then
  25. port="${queryport}"
  26. fi
  27. fn_print_info "Querying port: gsquery.py enabled"
  28. fn_scriptlog "Querying port: gsquery.py enabled"
  29. sleep 1
  30. # Will query up to 4 times every 15 seconds.
  31. # Servers changing map can return a failure.
  32. # Will Wait up to 60 seconds to confirm server is down giving server time to change map.
  33. totalseconds=0
  34. for queryattempt in {1..5}; do
  35. fn_print_dots "Querying port: ${ip}:${port} : ${totalseconds}/${queryattempt} : "
  36. fn_print_querying_eol
  37. fn_scriptlog "Querying port: ${ip}:${port} : ${queryattempt} : QUERYING"
  38. gsquerycmd=$("${functionsdir}"/gsquery.py -a "${ip}" -p 1 -e "${engine}" 2>&1)
  39. exitcode=$?
  40. sleep 1
  41. if [ "${exitcode}" == "0" ]; then
  42. # Server OK
  43. fn_print_ok "Querying port: ${ip}:${port} : ${queryattempt} : "
  44. fn_print_ok_eol
  45. fn_scriptlog "Querying port: ${ip}:${port} : ${queryattempt} : OK"
  46. sleep 1
  47. exit
  48. else
  49. # Server failed query
  50. fn_scriptlog "Querying port: ${ip}:${port} : ${queryattempt} : ${gsquerycmd}"
  51. if [ "${queryattempt}" == "5" ]; then
  52. # Server failed query 4 times confirmed failure
  53. fn_print_fail "Querying port: ${ip}:${port} : ${totalseconds}/${queryattempt} : "
  54. fn_print_fail_eol_nl
  55. fn_scriptlog "Querying port: ${ip}:${port} : ${queryattempt} : FAIL"
  56. sleep 1
  57. # Send email notification if enabled
  58. if [ "${emailnotification}" == "on" ]; then
  59. subject="${servicename} Monitor - Starting ${servername}"
  60. failurereason="Failed to query ${servicename}: ${gsquerycmd}"
  61. actiontaken="restarted ${servicename}"
  62. email.sh
  63. fi
  64. fn_restart
  65. break
  66. fi
  67. # Seconds counter
  68. for seconds in {1..15}; do
  69. fn_print_fail "Querying port: ${ip}:${port} : ${totalseconds}/${queryattempt} : \e[0;31m${gsquerycmd}\e[0m"
  70. totalseconds=$((totalseconds + 1))
  71. sleep 1
  72. if [ "${seconds}" == "15" ]; then
  73. break
  74. fi
  75. done
  76. fi
  77. done
  78. fi