summarylogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.SRCINFO4
-rw-r--r--PKGBUILD4
-rwxr-xr-xminecraftd.sh32
3 files changed, 28 insertions, 12 deletions
diff --git a/.SRCINFO b/.SRCINFO
index 1292327243cb..5b5480190816 100644
--- a/.SRCINFO
+++ b/.SRCINFO
@@ -1,7 +1,7 @@
pkgbase = minecraft-server
pkgdesc = Minecraft server unit files, script, and jar
pkgver = 1.9
- pkgrel = 5
+ pkgrel = 6
url = http://minecraft.net/
install = minecraft-server.install
arch = any
@@ -28,6 +28,6 @@ pkgbase = minecraft-server
md5sums = fef6fadd0739ae03ff71ba61025be207
md5sums = afb84ad0316af0aca421b36eaa2bbd90
md5sums = 54438e0c47cc5083e0a4376688b46092
- md5sums = e2fae644262285b633db924b0a384613
+ md5sums = 98fe0fdfe4021a522739e3e14601ad9f
pkgname = minecraft-server
diff --git a/PKGBUILD b/PKGBUILD
index 3832b098122b..b5b55bf89794 100644
--- a/PKGBUILD
+++ b/PKGBUILD
@@ -4,7 +4,7 @@
pkgname=minecraft-server
pkgver=1.9
-pkgrel=5
+pkgrel=6
pkgdesc="Minecraft server unit files, script, and jar"
arch=('any')
url="http://minecraft.net/"
@@ -28,7 +28,7 @@ md5sums=('ff68834eee875bcf367422c67673207c'
'fef6fadd0739ae03ff71ba61025be207'
'afb84ad0316af0aca421b36eaa2bbd90'
'54438e0c47cc5083e0a4376688b46092'
- 'e2fae644262285b633db924b0a384613')
+ '98fe0fdfe4021a522739e3e14601ad9f')
_game="minecraft"
_server_root="/srv/minecraft"
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