fn_serverquery 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. #!/bin/bash
  2. # LGSM fn_serverquery function
  3. # Author: Daniel Gibbs
  4. # Website: http://danielgibbs.co.uk
  5. # Version: 011214
  6. # uses gsquery.py to directly query the server
  7. # detects if the server locks up
  8. if [ -f gsquery.py ]; then
  9. if [ "${engine}" == "unreal" ]||[ "${engine}" == "unreal2" ]; then
  10. gameport=$(grep Port= "${systemdir}/${ini}"|grep -v Master|grep -v LAN|grep -v Proxy|grep -v Listen|sed 's/\Port=//g')
  11. port=$((${gameport} + 1))
  12. elif [ "${engine}" == "spark" ]; then
  13. port=$((${port} + 1))
  14. elif [ "${engine}" == "realvirtuality" ]; then
  15. port=${queryport}
  16. fi
  17. fn_printinfo "Monitoring ${servicename}: Detected gsquery.py"
  18. fn_scriptlog "Detected gsquery.py"
  19. sleep 1
  20. fn_printdots "Monitoring ${servicename}: Querying port: ${ip}:${port}: QUERYING"
  21. fn_scriptlog "Querying port: ${ip}:${port}: QUERYING"
  22. sleep 1
  23. serverquery=$(./gsquery.py -a ${ip} -p ${port} -e ${engine} 2>&1)
  24. exitcode=$?
  25. if [ "${exitcode}" == "1" ]||[ "${exitcode}" == "2" ]||[ "${exitcode}" == "3" ]||[ "${exitcode}" == "4" ]; then
  26. fn_printfail "Monitoring ${servicename}: Querying port: ${ip}:${port}: ${serverquery}"
  27. sleep 1
  28. echo -en "\n"
  29. fn_scriptlog "Querying port: ${ip}:${port}: ${serverquery}"
  30. if [[ -z "${secondquery}" ]]; then
  31. fn_printinfo "Monitoring ${servicename}: Waiting 30 seconds to re-query"
  32. fn_scriptlog "Waiting 30 seconds to re-query"
  33. sleep 30
  34. secondquery=1
  35. fn_serverquery
  36. fi
  37. if [ "${emailnotification}" = "on" ]; then
  38. subject="${servicename} Monitor - Starting ${servername}"
  39. failurereason="Failed to query ${servicename}: ${serverquery}"
  40. actiontaken="restarted ${servicename}"
  41. fn_emailnotification
  42. fi
  43. fn_restartserver
  44. exit
  45. elif [ "${exitcode}" == "0" ]; then
  46. fn_printok "Monitoring ${servicename}: Querying port: ${ip}:${port}: OK"
  47. fn_scriptlog "Querying port: ${ip}:${port}: OK"
  48. sleep 1
  49. echo -en "\n"
  50. exit
  51. elif [ "${exitcode}" == "126" ]; then
  52. fn_printfail "Monitoring ${servicename}: Querying port: ${ip}:${port}: ERROR: ./gsquery.py: Permission denied"
  53. fn_scriptlog "Querying port: ${ip}:${port}: ./gsquery.py: Permission denied"
  54. sleep 1
  55. echo -en "\n"
  56. echo "Attempting to resolve automatically"
  57. chmod +x -v gsquery.py
  58. exitcode=$?
  59. if [ "${exitcode}" == "0" ]; then
  60. fn_serverquery
  61. else
  62. echo -en "\nUnable to resolve automatically. Please manually fix permissions\n"
  63. owner=$(ls -al gsquery.py|awk '{ print $3 }')
  64. echo "As user ${owner} or root run the following command"
  65. whoami=$(whoami)
  66. echo -en "\nchown ${whoami}:${whoami} gsquery.py\n\n"
  67. exit
  68. fi
  69. else
  70. fn_printfail "Monitoring ${servicename}: Querying port: ${ip}:${port}: UNKNOWN ERROR"
  71. fn_scriptlog "Querying port: ${ip}:${port}: UNKNOWN ERROR"
  72. sleep 1
  73. echo -en "\n"
  74. ./gsquery.py -a ${ip} -p ${port} -e ${engine}
  75. exit
  76. fi
  77. fi