fn_serverquery 2.9 KB

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