summarylogtreecommitdiffstats
path: root/minecraftd.sh
diff options
context:
space:
mode:
Diffstat (limited to 'minecraftd.sh')
-rwxr-xr-xminecraftd.sh32
1 files changed, 24 insertions, 8 deletions
diff --git a/minecraftd.sh b/minecraftd.sh
index 1dc109da5790..43e5d40dd083 100755
--- a/minecraftd.sh
+++ b/minecraftd.sh
@@ -92,15 +92,20 @@ idle_server_daemon() {
# Stop the game server if no player was active for at least ${IDLE_IF_TIME}
if [[ "${no_player}" -ge "${IDLE_IF_TIME}" ]]; then
IDLE_SERVER="false" ${myname} stop
-
- # Game server is down, listen on port ${GAME_PORT} for incoming connections
- sleep 1
+ # Wait for game server to go down
+ for i in {1..90}; do
+ screen -S "${SESSION_NAME}" -Q select . > /dev/null
+ [[ $? -eq 1 ]] && break
+ [[ $i -eq 90 ]] && echo -e "\e[39;1m An error occured while trying to reset the idle_server! \e[0m"
+ sleep 0.1
+ done
+ # Listen on port ${GAME_PORT} for incoming connections
echo "Netcat is listening on port ${GAME_PORT} for incoming connections..."
${NETCAT_CMD} -v -l -p ${GAME_PORT}
[[ $? -eq 0 ]] && echo "Netcat caught an connection. The server is coming up again...."
IDLE_SERVER="false" ${myname} start
fi
- else
+ elif [[ $? -eq 0 ]]; then
no_player=0
fi
else
@@ -136,8 +141,13 @@ server_start() {
${SUDO_CMD} screen -S "${IDLE_SESSION_NAME}" -Q select . > /dev/null
if [[ $? -eq 0 ]]; then
${SUDO_CMD} screen -S "${IDLE_SESSION_NAME}" -X quit
- sleep 0.5
- ${SUDO_CMD} screen -dmS "${IDLE_SESSION_NAME}" /bin/bash -c "${myname} idle_server_daemon"
+ # Restart as soon as the idle_server_daemon has shut down completely
+ for i in {1..30}; do
+ ${SUDO_CMD} screen -S "${IDLE_SESSION_NAME}" -Q select . > /dev/null
+ [[ $? -eq 1 ]] && ${SUDO_CMD} screen -dmS "${IDLE_SESSION_NAME}" /bin/bash -c "${myname} idle_server_daemon" && break
+ [[ $i -eq 30 ]] && echo -e "\e[39;1m An error occured while trying to reset the idle_server! \e[0m"
+ sleep 0.1
+ done
else
echo -en "Starting idle server daeomon... "
${SUDO_CMD} screen -dmS "${IDLE_SESSION_NAME}" /bin/bash -c "${myname} idle_server_daemon"
@@ -178,7 +188,14 @@ server_stop() {
sleep 1
done
game_command stop
- echo -e "\e[39;1m done\e[0m"
+
+ # Finish as soon as the server has shut down completely
+ for i in {1..30}; do
+ ${SUDO_CMD} screen -S "${SESSION_NAME}" -Q select . > /dev/null
+ [[ $? -eq 1 ]] && echo -e "\e[39;1m done\e[0m" && break
+ [[ $i -eq 30 ]] && echo -e "\e[39;1m ERROR\e[0m"
+ sleep 0.1
+ done
else
echo "The corresponding screen session for ${SESSION_NAME} was already dead."
fi
@@ -221,7 +238,6 @@ server_restart() {
${SUDO_CMD} screen -S "${SESSION_NAME}" -Q select . > /dev/null
if [[ $? -eq 0 ]]; then
server_stop
- sleep 0.5
server_start
else
server_start