|
|
@@ -7,7 +7,7 @@
|
|
|
|
|
|
local commandname="STOP"
|
|
|
local commandaction="Stopping"
|
|
|
-local function_selfname="$(basename $(readlink -f "${BASH_SOURCE[0]}"))"
|
|
|
+local function_selfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
|
|
|
|
|
|
# Attempts graceful shutdown by sending the 'CTRL+c'.
|
|
|
fn_stop_graceful_ctrlc(){
|
|
|
@@ -37,29 +37,31 @@ fn_stop_graceful_ctrlc(){
|
|
|
fn_stop_tmux
|
|
|
}
|
|
|
|
|
|
-# Attempts graceful shutdown by sending the 'quit' command.
|
|
|
-fn_stop_graceful_quit(){
|
|
|
- fn_print_dots "Graceful: sending \"quit\""
|
|
|
- fn_script_log_info "Graceful: sending \"quit\""
|
|
|
- # sends quit
|
|
|
- tmux send -t "${servicename}" quit ENTER > /dev/null 2>&1
|
|
|
- # waits up to 30 seconds giving the server time to shutdown gracefuly
|
|
|
- for seconds in {1..30}; do
|
|
|
+# Attempts graceful shutdown by sending a specified command.
|
|
|
+# Usage: fn_stop_graceful_cmd "console_command" "timeout_in_seconds"
|
|
|
+# e.g.: fn_stop_graceful_cmd "quit" "30"
|
|
|
+fn_stop_graceful_cmd(){
|
|
|
+ fn_print_dots "Graceful: sending \"${1}\""
|
|
|
+ fn_script_log_info "Graceful: sending \"${1}\""
|
|
|
+ # sends specific stop command
|
|
|
+ tmux send -t "${servicename}" ${1} ENTER > /dev/null 2>&1
|
|
|
+ # waits up to given seconds giving the server time to shutdown gracefully
|
|
|
+ for ((seconds=1; seconds<=${2}; seconds++)); do
|
|
|
check_status.sh
|
|
|
if [ "${status}" == "0" ]; then
|
|
|
- fn_print_ok "Graceful: sending \"quit\": ${seconds}: "
|
|
|
+ fn_print_ok "Graceful: sending \"${1}\": ${seconds}: "
|
|
|
fn_print_ok_eol_nl
|
|
|
- fn_script_log_pass "Graceful: sending \"quit\": OK: ${seconds} seconds"
|
|
|
+ fn_script_log_pass "Graceful: sending \"${1}\": OK: ${seconds} seconds"
|
|
|
break
|
|
|
fi
|
|
|
sleep 1
|
|
|
- fn_print_dots "Graceful: sending \"quit\": ${seconds}"
|
|
|
+ fn_print_dots "Graceful: sending \"${1}\": ${seconds}"
|
|
|
done
|
|
|
check_status.sh
|
|
|
if [ "${status}" != "0" ]; then
|
|
|
- fn_print_error "Graceful: sending \"quit\": "
|
|
|
+ fn_print_error "Graceful: sending \"${1}\": "
|
|
|
fn_print_fail_eol_nl
|
|
|
- fn_script_log_error "Graceful: sending \"quit\": FAIL"
|
|
|
+ fn_script_log_error "Graceful: sending \"${1}\": FAIL"
|
|
|
fi
|
|
|
sleep 1
|
|
|
fn_stop_tmux
|
|
|
@@ -175,105 +177,22 @@ fn_stop_graceful_sdtd(){
|
|
|
fn_stop_tmux
|
|
|
}
|
|
|
|
|
|
-# Attempts graceful of Minecraft using rcon 'stop' command.
|
|
|
-fn_stop_graceful_minecraft(){
|
|
|
- fn_print_dots "Graceful: sending \"stop\""
|
|
|
- fn_script_log_info "Graceful: sending \"stop\""
|
|
|
- # sends quit
|
|
|
- tmux send -t "${servicename}" stop ENTER > /dev/null 2>&1
|
|
|
- # waits up to 30 seconds giving the server time to shutdown gracefuly
|
|
|
- for seconds in {1..30}; do
|
|
|
- check_status.sh
|
|
|
- if [ "${status}" == "0" ]; then
|
|
|
- fn_print_ok "Graceful: sending \"stop\": ${seconds}: "
|
|
|
- fn_print_ok_eol_nl
|
|
|
- fn_script_log_pass "Graceful: sending \"stop\": OK: ${seconds} seconds"
|
|
|
- break
|
|
|
- fi
|
|
|
- sleep 1
|
|
|
- fn_print_dots "Graceful: sending \"stop\": ${seconds}"
|
|
|
- done
|
|
|
- check_status.sh
|
|
|
- if [ "${status}" != "0" ]; then
|
|
|
- fn_print_error "Graceful: sending \"stop\": "
|
|
|
- fn_print_fail_eol_nl
|
|
|
- fn_script_log_error "Graceful: sending \"stop\": FAIL"
|
|
|
- fi
|
|
|
- sleep 1
|
|
|
- fn_stop_tmux
|
|
|
-}
|
|
|
-
|
|
|
-# Attempts graceful of mta using rcon 'quit' command.
|
|
|
-fn_stop_graceful_mta(){
|
|
|
- fn_print_dots "Graceful: sending \"quit\""
|
|
|
- fn_script_log_info "Graceful: sending \"quit\""
|
|
|
- # sends quit
|
|
|
- tmux send -t "${servicename}" quit ENTER > /dev/null 2>&1
|
|
|
- # waits up to 120 seconds giving the server time to shutdown gracefuly, we need a long wait time here as resources are stopped individually and process their own shutdowns
|
|
|
- for seconds in {1..120}; do
|
|
|
- check_status.sh
|
|
|
- if [ "${status}" == "0" ]; then
|
|
|
- fn_print_ok "Graceful: sending \"quit\": ${seconds}: "
|
|
|
- fn_print_ok_eol_nl
|
|
|
- fn_script_log_pass "Graceful: sending \"quit\": OK: ${seconds} seconds"
|
|
|
- break
|
|
|
- fi
|
|
|
- sleep 1
|
|
|
- fn_print_dots "Graceful: sending \"quit\": ${seconds}"
|
|
|
- done
|
|
|
- check_status.sh
|
|
|
- if [ "${status}" != "0" ]; then
|
|
|
- fn_print_error "Graceful: sending \"quit\": "
|
|
|
- fn_print_fail_eol_nl
|
|
|
- fn_script_log_error "Graceful: sending \"quit\": FAIL"
|
|
|
- fi
|
|
|
- sleep 1
|
|
|
- fn_stop_tmux
|
|
|
-}
|
|
|
-
|
|
|
-# Attempts graceful of Terraria using 'exit' console command.
|
|
|
-fn_stop_graceful_terraria(){
|
|
|
- fn_print_dots "Graceful: sending \"exit\""
|
|
|
- fn_script_log_info "Graceful: sending \"exit\""
|
|
|
- # sends exit
|
|
|
- tmux send -t "${servicename}" exit ENTER > /dev/null 2>&1
|
|
|
- # waits up to 30 seconds giving the server time to shutdown gracefuly
|
|
|
- for seconds in {1..30}; do
|
|
|
- check_status.sh
|
|
|
- if [ "${status}" == "0" ]; then
|
|
|
- fn_print_ok "Graceful: sending \"exit\": ${seconds}: "
|
|
|
- fn_print_ok_eol_nl
|
|
|
- fn_script_log_pass "Graceful: sending \"exit\": OK: ${seconds} seconds"
|
|
|
- break
|
|
|
- fi
|
|
|
- sleep 1
|
|
|
- fn_print_dots "Graceful: sending \"exit\": ${seconds}"
|
|
|
- done
|
|
|
- check_status.sh
|
|
|
- if [ "${status}" != "0" ]; then
|
|
|
- fn_print_error "Graceful: sending \"exit\": "
|
|
|
- fn_print_fail_eol_nl
|
|
|
- fn_script_log_error "Graceful: sending \"exit\": FAIL"
|
|
|
- fi
|
|
|
- sleep 1
|
|
|
- fn_stop_tmux
|
|
|
-}
|
|
|
-
|
|
|
fn_stop_graceful_select(){
|
|
|
if [ "${gamename}" == "7 Days To Die" ]; then
|
|
|
fn_stop_graceful_sdtd
|
|
|
elif [ "${gamename}" == "Terraria" ]; then
|
|
|
- fn_stop_graceful_terraria
|
|
|
+ fn_stop_graceful_cmd "exit" 30
|
|
|
elif [ "${gamename}" == "Minecraft" ]; then
|
|
|
- fn_stop_graceful_minecraft
|
|
|
+ fn_stop_graceful_cmd "stop" 30
|
|
|
elif [ "${gamename}" == "Multi Theft Auto" ]; then
|
|
|
- fn_stop_graceful_mta
|
|
|
+ # we need a long wait time here as resources are stopped individually and process their own shutdowns
|
|
|
+ fn_stop_graceful_cmd "quit" 120
|
|
|
elif [ "${engine}" == "goldsource" ]; then
|
|
|
fn_stop_graceful_goldsource
|
|
|
elif [ "${gamename}" == "Factorio" ]||[ "${engine}" == "unity3d" ]||[ "${engine}" == "unreal4" ]||[ "${engine}" == "unreal3" ]||[ "${engine}" == "unreal2" ]||[ "${engine}" == "unreal" ]||[ "${gamename}" == "Mumble" ]; then
|
|
|
fn_stop_graceful_ctrlc
|
|
|
- elif [ "${engine}" == "source" ]||[ "${engine}" == "quake" ]||[ "${engine}" == "idtech2" ]||[ "${engine}" == "idtech3" ]||[ "${engine}" == "idtech3_ql" ]||[ "${engine}" == "Just Cause 2" ]; then
|
|
|
- fn_stop_graceful_quit
|
|
|
+ elif [ "${engine}" == "source" ]||[ "${engine}" == "quake" ]||[ "${engine}" == "idtech2" ]||[ "${engine}" == "idtech3" ]||[ "${engine}" == "idtech3_ql" ]||[ "${engine}" == "Just Cause 2" ]||[ "${engine}" == "projectzomboid" ]; then
|
|
|
+ fn_stop_graceful_cmd "quit" 30
|
|
|
else
|
|
|
fn_stop_tmux
|
|
|
fi
|