mirror of
https://github.com/itzg/docker-minecraft-server
synced 2024-12-13 13:52:27 +00:00
87 lines
2.1 KiB
Bash
87 lines
2.1 KiB
Bash
#!/bin/bash
|
|
|
|
# needed for the clients connected function residing in autopause
|
|
. /auto/autopause-fcns.sh
|
|
|
|
# shellcheck source=../../scripts/start-utils
|
|
. "${SCRIPTS:-/}start-utils"
|
|
if isTrue "${DEBUG_AUTOSTOP}"; then
|
|
set -x
|
|
fi
|
|
|
|
# wait for java process to be started
|
|
while :
|
|
do
|
|
if java_process_exists ; then
|
|
break
|
|
fi
|
|
sleep 0.1
|
|
done
|
|
|
|
STATE=INIT
|
|
|
|
while :
|
|
do
|
|
isTrue "${DEBUG_AUTOSTOP}" && log "DEBUG: autostop state = $STATE"
|
|
case X$STATE in
|
|
XINIT)
|
|
# Server startup
|
|
if mc_server_listening ; then
|
|
TIME_THRESH=$(($(current_uptime)+AUTOSTOP_TIMEOUT_INIT))
|
|
|
|
if [ -e /data/.skip-stop ] ; then
|
|
logAutostop "'/data/.skip-stop' file is present - skipping stopping"
|
|
else
|
|
logAutostop "MC Server listening for connections - stopping in $AUTOSTOP_TIMEOUT_INIT seconds"
|
|
fi
|
|
|
|
STATE=II
|
|
fi
|
|
;;
|
|
XII)
|
|
# Initial idle
|
|
if java_clients_connected ; then
|
|
logAutostop "Client connected - waiting for disconnect"
|
|
STATE=E
|
|
elif [ -e /data/.skip-stop ] ; then
|
|
logAutostop "'/data/.skip-stop' file is present - skipping stopping"
|
|
STATE=E
|
|
else
|
|
if [[ $(current_uptime) -ge $TIME_THRESH ]] ; then
|
|
logAutostop "No client connected since startup - stopping server"
|
|
/auto/stop.sh
|
|
exit 0
|
|
fi
|
|
fi
|
|
;;
|
|
XE)
|
|
# Established
|
|
if ! java_clients_connected ; then
|
|
TIME_THRESH=$(($(current_uptime)+$AUTOSTOP_TIMEOUT_EST))
|
|
logAutostop "All clients disconnected - stopping in $AUTOSTOP_TIMEOUT_EST seconds"
|
|
STATE=I
|
|
fi
|
|
;;
|
|
XI)
|
|
# Idle
|
|
if java_clients_connected ; then
|
|
logAutostop "Client reconnected - waiting for disconnect"
|
|
STATE=E
|
|
elif [ -e /data/.skip-stop ] ; then
|
|
TIME_THRESH=$(($(current_uptime)+$AUTOSTOP_TIMEOUT_EST))
|
|
logAutostop "'/data/.skip-stop' file is present - skipping stopping"
|
|
STATE=E
|
|
else
|
|
if [[ $(current_uptime) -ge $TIME_THRESH ]] ; then
|
|
logAutostop "No client reconnected - stopping"
|
|
/auto/stop.sh
|
|
exit 0
|
|
fi
|
|
fi
|
|
;;
|
|
*)
|
|
logAutostop "Error: invalid state: $STATE"
|
|
;;
|
|
esac
|
|
sleep $AUTOSTOP_PERIOD
|
|
done
|