aboutsummarylogtreecommitdiffstats
path: root/minecraftd.sh
diff options
context:
space:
mode:
authorGordian Edenhofer2016-03-06 13:50:10 +0100
committerGordian Edenhofer2016-03-06 14:24:39 +0100
commit8cba93614494584dae9b0c06ee563dbc6c69c985 (patch)
treed87b25605dcdf06230839fcc7b7ff83f40202ae0 /minecraftd.sh
parent904e9c827374dd52bfb2c1664b531648b5cd62dc (diff)
downloadaur-8cba93614494584dae9b0c06ee563dbc6c69c985.tar.gz
Upgpkg: 1.9-6
On server stop, return to the prompt as soon as the server has completely shut down, not as soon as the shutdown command has been sent. Thereby fixing the restart capability. Introduce sanity check whether the servers is really down in idle_daemon and server_start as well. Signed-off-by: Gordian Edenhofer <gordian.edenhofer@gmail.com>
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