|
|
@ -3,7 +3,7 @@ |
|
|
|
# Author: Daniel Gibbs |
|
|
|
# Contributor: UltimateByte |
|
|
|
# Website: https://linuxgsm.com |
|
|
|
# Description: Monitors server by checking for running processes. |
|
|
|
# Description: Monitors server by checking for running processes |
|
|
|
# then passes to gamedig and gsquery. |
|
|
|
|
|
|
|
local commandname="MONITOR" |
|
|
@ -11,7 +11,7 @@ local commandaction="Monitor" |
|
|
|
local function_selfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")" |
|
|
|
|
|
|
|
fn_monitor_loop(){ |
|
|
|
# Will query up to 5 times every 15 seconds. |
|
|
|
# Monitor will query up to 5 times every 15 seconds. |
|
|
|
# Query will wait up to 60 seconds to confirm server is down giving server time if changing map. |
|
|
|
totalseconds=0 |
|
|
|
for queryattempt in {1..5}; do |
|
|
@ -33,7 +33,7 @@ for queryattempt in {1..5}; do |
|
|
|
fi |
|
|
|
|
|
|
|
if [ "${querystatus}" == "0" ]; then |
|
|
|
# Server query OK |
|
|
|
# Server query OK. |
|
|
|
sleep 0.5 |
|
|
|
fn_print_ok "Querying port: ${querymethod}: ${ip}:${queryport} : ${totalseconds}/${queryattempt}: " |
|
|
|
fn_print_ok_eol_nl |
|
|
@ -42,21 +42,21 @@ for queryattempt in {1..5}; do |
|
|
|
monitorpass=1 |
|
|
|
core_exit.sh |
|
|
|
else |
|
|
|
# Server query FAIL |
|
|
|
# Server query FAIL. |
|
|
|
fn_script_log_info "Querying port: ${querymethod}: ${ip}:${queryport} : ${queryattempt}: FAIL" |
|
|
|
fn_print_fail "Querying port: ${querymethod}: ${ip}:${queryport} : ${totalseconds}/${queryattempt}: " |
|
|
|
fn_print_fail_eol |
|
|
|
sleep 0.5 |
|
|
|
# monitor try gamedig first then gsquery before restarting |
|
|
|
# Monitor try gamedig first then gsquery before restarting. |
|
|
|
if [ "${querymethod}" == "gsquery" ]; then |
|
|
|
if [ "${totalseconds}" -ge "59" ]; then |
|
|
|
# Server query FAIL for over 59 seconds reboot server |
|
|
|
# Server query FAIL for over 59 seconds reboot server. |
|
|
|
fn_print_fail "Querying port: ${querymethod}: ${ip}:${queryport} : ${totalseconds}/${queryattempt}: " |
|
|
|
fn_print_fail_eol_nl |
|
|
|
fn_script_log_error "Querying port: ${querymethod}: ${ip}:${queryport} : ${queryattempt}: FAIL" |
|
|
|
sleep 0.5 |
|
|
|
|
|
|
|
# Send alert if enabled |
|
|
|
# Send alert if enabled. |
|
|
|
alert="restartquery" |
|
|
|
alert.sh |
|
|
|
command_restart.sh |
|
|
@ -68,7 +68,7 @@ for queryattempt in {1..5}; do |
|
|
|
fi |
|
|
|
fi |
|
|
|
|
|
|
|
# Seconds counter |
|
|
|
# Seconds counter. |
|
|
|
for seconds in {1..15}; do |
|
|
|
fn_print_fail "Querying port: ${querymethod}: ${ip}:${queryport} : ${totalseconds}/${queryattempt}: WAIT" |
|
|
|
totalseconds=$((totalseconds + 1)) |
|
|
@ -82,7 +82,7 @@ done |
|
|
|
} |
|
|
|
|
|
|
|
fn_monitor_check_lockfile(){ |
|
|
|
# Monitor does not run it lockfile is not found |
|
|
|
# Monitor does not run it lockfile is not found. |
|
|
|
if [ ! -f "${rootdir}/${lockselfname}" ]; then |
|
|
|
fn_print_error_nl "Disabled: No lockfile found" |
|
|
|
fn_script_log_error "Disabled: No lockfile found" |
|
|
@ -131,8 +131,8 @@ fn_monitor_check_session(){ |
|
|
|
|
|
|
|
fn_monitor_query(){ |
|
|
|
fn_script_log_info "Querying port: query enabled" |
|
|
|
# engines that work with query |
|
|
|
local allowed_engines_array=( avalanche2.0 avalanche3.0 goldsource idtech2 idtech3 idtech3_ql iw2.0 iw3.0 lwjgl2 madness quake refractor realvirtuality source spark starbound unity3d unreal unreal2 unreal4 wurm ) |
|
|
|
# Engines that work with query. |
|
|
|
local allowed_engines_array=( avalanche2.0 avalanche3.0 goldsource idtech2 idtech3 idtech3_ql ioquake3 iw2.0 iw3.0 lwjgl2 madness quake refractor realvirtuality source spark starbound unity3d unreal unreal2 unreal4 wurm ) |
|
|
|
for allowed_engine in "${allowed_engines_array[@]}" |
|
|
|
do |
|
|
|
if [ "${allowed_engine}" == "${engine}" ]; then |
|
|
@ -142,7 +142,7 @@ fn_monitor_query(){ |
|
|
|
local engine="unreal4" |
|
|
|
fi |
|
|
|
|
|
|
|
# will first attempt to use gamedig then gsquery |
|
|
|
# Will first attempt to use gamedig then gsquery. |
|
|
|
totalseconds=0 |
|
|
|
if [ "${shortname}" == "wurm" ]; then |
|
|
|
local query_methods_array=( gsquery ) |
|
|
@ -152,7 +152,7 @@ fn_monitor_query(){ |
|
|
|
for query_method in "${query_methods_array[@]}" |
|
|
|
do |
|
|
|
if [ "${query_method}" == "gamedig" ]; then |
|
|
|
# will bypass gamedig if not installed |
|
|
|
# Will bypass gamedig if not installed. |
|
|
|
if [ "$(command -v gamedig 2>/dev/null)" ]&&[ "$(command -v jq 2>/dev/null)" ]; then |
|
|
|
if [ -z "${monitorpass}" ]; then |
|
|
|
querymethod="${query_method}" |
|
|
@ -196,5 +196,4 @@ elif [ "${shortname}" == "ts3" ]||[ "${shortname}" == "eco" ]||[ "${shortname}" |
|
|
|
else |
|
|
|
fn_monitor_query |
|
|
|
fi |
|
|
|
|
|
|
|
core_exit.sh |