summarylogtreecommitdiffstats
diff options
context:
space:
mode:
authorGordian Edenhofer2016-03-29 17:44:57 +0200
committerGordian Edenhofer2016-03-29 17:44:57 +0200
commit991cfe163ec268114340e653f954472d1945bb85 (patch)
treef2900fdabec9506aebee7873f4e7c4b3716708e5
parente45774abeee30141a6859c60ab8476793406d15a (diff)
downloadaur-991cfe163ec268114340e653f954472d1945bb85.tar.gz
Upgpkg: 1.9-8
Stop server immediately if no player is on the server. Increase waiting period between executing a game-command and scanning the logs from 0.2 seconds to 0.3 seconds. Wait before scanning the logs when checking for active players. Fix typo occured --> occurred and some spacing issues.
-rw-r--r--.SRCINFO4
-rw-r--r--PKGBUILD4
-rwxr-xr-xminecraftd.sh54
3 files changed, 39 insertions, 23 deletions
diff --git a/.SRCINFO b/.SRCINFO
index f168590fe43..01f0b3effed 100644
--- a/.SRCINFO
+++ b/.SRCINFO
@@ -1,7 +1,7 @@
pkgbase = minecraft-server
pkgdesc = Minecraft server unit files, script, and jar
pkgver = 1.9
- pkgrel = 7
+ pkgrel = 8
url = http://minecraft.net/
install = minecraft-server.install
arch = any
@@ -28,6 +28,6 @@ pkgbase = minecraft-server
md5sums = fef6fadd0739ae03ff71ba61025be207
md5sums = afb84ad0316af0aca421b36eaa2bbd90
md5sums = 00045683c06924d765ac14887218ffcc
- md5sums = 18f23e5ad6547e6110a407808de40332
+ md5sums = 48cb57c426c7725483cd0c9af24048df
pkgname = minecraft-server
diff --git a/PKGBUILD b/PKGBUILD
index 4f27dbd6933..70195f15aed 100644
--- a/PKGBUILD
+++ b/PKGBUILD
@@ -4,7 +4,7 @@
pkgname=minecraft-server
pkgver=1.9
-pkgrel=7
+pkgrel=8
pkgdesc="Minecraft server unit files, script, and jar"
arch=('any')
url="http://minecraft.net/"
@@ -28,7 +28,7 @@ md5sums=('ff68834eee875bcf367422c67673207c'
'fef6fadd0739ae03ff71ba61025be207'
'afb84ad0316af0aca421b36eaa2bbd90'
'00045683c06924d765ac14887218ffcc'
- '18f23e5ad6547e6110a407808de40332')
+ '48cb57c426c7725483cd0c9af24048df')
_game="minecraft"
_server_root="/srv/minecraft"
diff --git a/minecraftd.sh b/minecraftd.sh
index 56ef155b4f7..eed7da83178 100755
--- a/minecraftd.sh
+++ b/minecraftd.sh
@@ -37,6 +37,12 @@ source /etc/conf.d/${game} || echo "Could not source /etc/conf.d/${game}"
# Preserve the content of IDLE_SERVER without making it readonly
[[ ! -z ${tmp_IDLE_SERVER} ]] && IDLE_SERVER=${tmp_IDLE_SERVER}
+# The variable defines the row in which the first player is printed. It is interpreted
+# by awk and depends on the flavor of the game server.
+# The stock minecraft server prints the first player in the 4th row, spigot in the 6th.
+player_delimiter=4
+
+
# Check whether sudo is needed at all
if [[ $(whoami) == ${GAME_USER} ]]; then
SUDO_CMD=""
@@ -84,9 +90,7 @@ idle_server_daemon() {
if [[ $? -eq 0 ]]; then
# Game server is up and running
screen -S "${SESSION_NAME}" -X stuff "`printf \"list\r\"`"
- # The "player_delimiter" in awk print needs to be 6 for the spigot server
- # since the according information is contained in the 6th not in th 4th column
- if [[ $? -eq 0 && -z $(tail -n 1 "${LOGPATH}/latest.log" | awk '{ print $4 }') ]]; then
+ if [[ $? -eq 0 && -z $(sleep 0.3; tail -n 1 "${LOGPATH}/latest.log" | awk "{ print \$${player_delimiter} }") ]]; then
# No player was seen on the server through list
no_player=$((no_player + CHECK_PLAYER_TIME))
# Stop the game server if no player was active for at least ${IDLE_IF_TIME}
@@ -96,13 +100,13 @@ idle_server_daemon() {
for i in {1..100}; do
screen -S "${SESSION_NAME}" -Q select . > /dev/null
[[ $? -eq 1 ]] && break
- [[ $i -eq 100 ]] && echo -e "An \e[39;1merror\e[0m occured while trying to reset the idle_server!"
+ [[ $i -eq 100 ]] && echo -e "An \e[39;1merror\e[0m occurred while trying to reset the idle_server!"
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...."
+ [[ $? -eq 0 ]] && echo "Netcat caught an connection. The server is coming up again..."
IDLE_SERVER="false" ${myname} start
fi
elif [[ $? -eq 0 ]]; then
@@ -112,7 +116,7 @@ idle_server_daemon() {
# Game server is down, 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}
- echo "Netcat caught an connection. The server is coming up again...."
+ echo "Netcat caught an connection. The server is coming up again..."
IDLE_SERVER="false" ${myname} start
fi
done
@@ -125,7 +129,7 @@ server_start() {
if [[ $? -eq 0 ]]; then
echo "A screen ${SESSION_NAME} session is already running. Please close it first."
else
- echo -en "Starting server... "
+ echo -en "Starting server..."
${SUDO_CMD} screen -dmS "${SESSION_NAME}" /bin/bash -c "cd '${SERVER_ROOT}'; java ${JAVA_PARMS} -jar '${SERVER_ROOT}/${MAIN_EXECUTABLE}' nogui"
echo -e "\e[39;1m done\e[0m"
fi
@@ -145,11 +149,11 @@ server_start() {
for i in {1..100}; 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 100 ]] && echo -e "An \e[39;1merror\e[0m occured while trying to reset the idle_server!"
+ [[ $i -eq 100 ]] && echo -e "An \e[39;1merror\e[0m occurred while trying to reset the idle_server!"
sleep 0.1
done
else
- echo -en "Starting idle server daeomon... "
+ echo -en "Starting idle server daeomon..."
${SUDO_CMD} screen -dmS "${IDLE_SESSION_NAME}" /bin/bash -c "${myname} idle_server_daemon"
echo -e "\e[39;1m done\e[0m"
fi
@@ -168,7 +172,7 @@ server_stop() {
${SUDO_CMD} screen -S "${IDLE_SESSION_NAME}" -Q select . > /dev/null
if [[ $? -eq 0 ]]; then
- echo -en "Stopping idle server daemon... "
+ echo -en "Stopping idle server daemon..."
${SUDO_CMD} screen -S "${IDLE_SESSION_NAME}" -X quit
echo -e "\e[39;1m done\e[0m"
else
@@ -179,15 +183,27 @@ server_stop() {
# Gracefully exit the game server
${SUDO_CMD} screen -S "${SESSION_NAME}" -Q select . > /dev/null
if [[ $? -eq 0 ]]; then
+ # Game server is up and running
game_command save-all
- game_command say "Server is going down in 10 seconds! HURRY UP WITH WHATEVER YOU ARE DOING!" # Warning the users
- echo -en "Server is going down in... "
- for i in {1..10}; do
- game_command say "down in... $(expr 10 - $i)"
- echo -n " $(expr 10 - $i)"
- sleep 1
- done
- game_command stop
+
+ # Gracefully stop the server when there are still active players
+ ${SUDO_CMD} screen -S "${SESSION_NAME}" -X stuff "`printf \"list\r\"`"
+ if [[ $? -eq 0 && -z $(sleep 0.3; tail -n 1 "${LOGPATH}/latest.log" | awk "{ print \$${player_delimiter} }") ]]; then
+ # No player was seen on the server through list
+ echo -en "Server is going down..."
+ game_command stop
+ else
+ # Player(s) were seen on the server through list (or an error occurred)
+ # Warning the users through the server console
+ game_command say "Server is going down in 10 seconds! HURRY UP WITH WHATEVER YOU ARE DOING!"
+ echo -en "Server is going down in..."
+ for i in {1..10}; do
+ game_command say "down in... $(expr 10 - $i)"
+ echo -n " $(expr 10 - $i)"
+ sleep 1
+ done
+ game_command stop
+ fi
# Finish as soon as the server has shut down completely
for i in {1..100}; do
@@ -358,7 +374,7 @@ server_command() {
${SUDO_CMD} screen -S "${SESSION_NAME}" -Q select . > /dev/null
if [[ $? -eq 0 ]]; then
- sleep 0.2 &
+ sleep 0.3 &
sleep_pid=$!
game_command "$@"
${SUDO_CMD} tail -f --pid=${sleep_pid} -n 0 "${LOGPATH}/latest.log"