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.
This commit is contained in:
		
							parent
							
								
									e45774abee
								
							
						
					
					
						commit
						991cfe163e
					
				
							
								
								
									
										4
									
								
								.SRCINFO
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								.SRCINFO
									
									
									
									
									
								
							| 
						 | 
					@ -1,7 +1,7 @@
 | 
				
			||||||
pkgbase = minecraft-server
 | 
					pkgbase = minecraft-server
 | 
				
			||||||
	pkgdesc = Minecraft server unit files, script, and jar
 | 
						pkgdesc = Minecraft server unit files, script, and jar
 | 
				
			||||||
	pkgver = 1.9
 | 
						pkgver = 1.9
 | 
				
			||||||
	pkgrel = 7
 | 
						pkgrel = 8
 | 
				
			||||||
	url = http://minecraft.net/
 | 
						url = http://minecraft.net/
 | 
				
			||||||
	install = minecraft-server.install
 | 
						install = minecraft-server.install
 | 
				
			||||||
	arch = any
 | 
						arch = any
 | 
				
			||||||
| 
						 | 
					@ -28,6 +28,6 @@ pkgbase = minecraft-server
 | 
				
			||||||
	md5sums = fef6fadd0739ae03ff71ba61025be207
 | 
						md5sums = fef6fadd0739ae03ff71ba61025be207
 | 
				
			||||||
	md5sums = afb84ad0316af0aca421b36eaa2bbd90
 | 
						md5sums = afb84ad0316af0aca421b36eaa2bbd90
 | 
				
			||||||
	md5sums = 00045683c06924d765ac14887218ffcc
 | 
						md5sums = 00045683c06924d765ac14887218ffcc
 | 
				
			||||||
	md5sums = 18f23e5ad6547e6110a407808de40332
 | 
						md5sums = 48cb57c426c7725483cd0c9af24048df
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pkgname = minecraft-server
 | 
					pkgname = minecraft-server
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										4
									
								
								PKGBUILD
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								PKGBUILD
									
									
									
									
									
								
							| 
						 | 
					@ -4,7 +4,7 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pkgname=minecraft-server
 | 
					pkgname=minecraft-server
 | 
				
			||||||
pkgver=1.9
 | 
					pkgver=1.9
 | 
				
			||||||
pkgrel=7
 | 
					pkgrel=8
 | 
				
			||||||
pkgdesc="Minecraft server unit files, script, and jar"
 | 
					pkgdesc="Minecraft server unit files, script, and jar"
 | 
				
			||||||
arch=('any')
 | 
					arch=('any')
 | 
				
			||||||
url="http://minecraft.net/"
 | 
					url="http://minecraft.net/"
 | 
				
			||||||
| 
						 | 
					@ -28,7 +28,7 @@ md5sums=('ff68834eee875bcf367422c67673207c'
 | 
				
			||||||
         'fef6fadd0739ae03ff71ba61025be207'
 | 
					         'fef6fadd0739ae03ff71ba61025be207'
 | 
				
			||||||
         'afb84ad0316af0aca421b36eaa2bbd90'
 | 
					         'afb84ad0316af0aca421b36eaa2bbd90'
 | 
				
			||||||
         '00045683c06924d765ac14887218ffcc'
 | 
					         '00045683c06924d765ac14887218ffcc'
 | 
				
			||||||
         '18f23e5ad6547e6110a407808de40332')
 | 
					         '48cb57c426c7725483cd0c9af24048df')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
_game="minecraft"
 | 
					_game="minecraft"
 | 
				
			||||||
_server_root="/srv/minecraft"
 | 
					_server_root="/srv/minecraft"
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -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
 | 
					# Preserve the content of IDLE_SERVER without making it readonly
 | 
				
			||||||
[[ ! -z ${tmp_IDLE_SERVER} ]] && IDLE_SERVER=${tmp_IDLE_SERVER}
 | 
					[[ ! -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
 | 
					# Check whether sudo is needed at all
 | 
				
			||||||
if [[ $(whoami) == ${GAME_USER} ]]; then
 | 
					if [[ $(whoami) == ${GAME_USER} ]]; then
 | 
				
			||||||
	SUDO_CMD=""
 | 
						SUDO_CMD=""
 | 
				
			||||||
| 
						 | 
					@ -84,9 +90,7 @@ idle_server_daemon() {
 | 
				
			||||||
		if [[ $? -eq 0 ]]; then
 | 
							if [[ $? -eq 0 ]]; then
 | 
				
			||||||
			# Game server is up and running
 | 
								# Game server is up and running
 | 
				
			||||||
			screen -S "${SESSION_NAME}" -X stuff "`printf \"list\r\"`"
 | 
								screen -S "${SESSION_NAME}" -X stuff "`printf \"list\r\"`"
 | 
				
			||||||
			# The "player_delimiter" in awk print needs to be 6 for the spigot server
 | 
								if [[ $? -eq 0 && -z $(sleep 0.3; tail -n 1 "${LOGPATH}/latest.log" | awk "{ print \$${player_delimiter} }") ]]; then
 | 
				
			||||||
			# 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
 | 
					 | 
				
			||||||
				# No player was seen on the server through list
 | 
									# No player was seen on the server through list
 | 
				
			||||||
				no_player=$((no_player + CHECK_PLAYER_TIME))
 | 
									no_player=$((no_player + CHECK_PLAYER_TIME))
 | 
				
			||||||
				# Stop the game server if no player was active for at least ${IDLE_IF_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
 | 
										for i in {1..100}; do
 | 
				
			||||||
						screen -S "${SESSION_NAME}" -Q select . > /dev/null
 | 
											screen -S "${SESSION_NAME}" -Q select . > /dev/null
 | 
				
			||||||
						[[ $? -eq 1 ]] && break
 | 
											[[ $? -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
 | 
											sleep 0.1
 | 
				
			||||||
					done
 | 
										done
 | 
				
			||||||
					# Listen on port ${GAME_PORT} for incoming connections
 | 
										# Listen on port ${GAME_PORT} for incoming connections
 | 
				
			||||||
					echo "Netcat is listening 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}
 | 
										${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
 | 
										IDLE_SERVER="false" ${myname} start
 | 
				
			||||||
				fi
 | 
									fi
 | 
				
			||||||
			elif [[ $? -eq 0 ]]; then
 | 
								elif [[ $? -eq 0 ]]; then
 | 
				
			||||||
| 
						 | 
					@ -112,7 +116,7 @@ idle_server_daemon() {
 | 
				
			||||||
			# Game server is down, listen on port ${GAME_PORT} for incoming connections
 | 
								# Game server is down, listen on port ${GAME_PORT} for incoming connections
 | 
				
			||||||
			echo "Netcat is listening 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}
 | 
								${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
 | 
								IDLE_SERVER="false" ${myname} start
 | 
				
			||||||
		fi
 | 
							fi
 | 
				
			||||||
	done
 | 
						done
 | 
				
			||||||
| 
						 | 
					@ -125,7 +129,7 @@ server_start() {
 | 
				
			||||||
	if [[ $? -eq 0 ]]; then
 | 
						if [[ $? -eq 0 ]]; then
 | 
				
			||||||
		echo "A screen ${SESSION_NAME} session is already running. Please close it first."
 | 
							echo "A screen ${SESSION_NAME} session is already running. Please close it first."
 | 
				
			||||||
	else
 | 
						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"
 | 
							${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"
 | 
							echo -e "\e[39;1m done\e[0m"
 | 
				
			||||||
	fi
 | 
						fi
 | 
				
			||||||
| 
						 | 
					@ -145,11 +149,11 @@ server_start() {
 | 
				
			||||||
			for i in {1..100}; do
 | 
								for i in {1..100}; do
 | 
				
			||||||
				${SUDO_CMD} screen -S "${IDLE_SESSION_NAME}" -Q select . > /dev/null
 | 
									${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
 | 
									[[ $? -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
 | 
									sleep 0.1
 | 
				
			||||||
			done
 | 
								done
 | 
				
			||||||
		else
 | 
							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"
 | 
								${SUDO_CMD} screen -dmS "${IDLE_SESSION_NAME}" /bin/bash -c "${myname} idle_server_daemon"
 | 
				
			||||||
			echo -e "\e[39;1m done\e[0m"
 | 
								echo -e "\e[39;1m done\e[0m"
 | 
				
			||||||
		fi
 | 
							fi
 | 
				
			||||||
| 
						 | 
					@ -168,7 +172,7 @@ server_stop() {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		${SUDO_CMD} screen -S "${IDLE_SESSION_NAME}" -Q select . > /dev/null
 | 
							${SUDO_CMD} screen -S "${IDLE_SESSION_NAME}" -Q select . > /dev/null
 | 
				
			||||||
		if [[ $? -eq 0 ]]; then
 | 
							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
 | 
								${SUDO_CMD} screen -S "${IDLE_SESSION_NAME}" -X quit
 | 
				
			||||||
			echo -e "\e[39;1m done\e[0m"
 | 
								echo -e "\e[39;1m done\e[0m"
 | 
				
			||||||
		else
 | 
							else
 | 
				
			||||||
| 
						 | 
					@ -179,15 +183,27 @@ server_stop() {
 | 
				
			||||||
	# Gracefully exit the game server
 | 
						# Gracefully exit the game server
 | 
				
			||||||
	${SUDO_CMD} screen -S "${SESSION_NAME}" -Q select . > /dev/null
 | 
						${SUDO_CMD} screen -S "${SESSION_NAME}" -Q select . > /dev/null
 | 
				
			||||||
	if [[ $? -eq 0 ]]; then
 | 
						if [[ $? -eq 0 ]]; then
 | 
				
			||||||
 | 
							# Game server is up and running
 | 
				
			||||||
		game_command save-all
 | 
							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... "
 | 
							# Gracefully stop the server when there are still active players
 | 
				
			||||||
		for i in {1..10}; do
 | 
							${SUDO_CMD} screen -S "${SESSION_NAME}" -X stuff "`printf \"list\r\"`"
 | 
				
			||||||
			game_command say "down in... $(expr 10 - $i)"
 | 
							if [[ $? -eq 0 && -z $(sleep 0.3; tail -n 1 "${LOGPATH}/latest.log" | awk "{ print \$${player_delimiter} }") ]]; then
 | 
				
			||||||
			echo -n " $(expr 10 - $i)"
 | 
								# No player was seen on the server through list
 | 
				
			||||||
			sleep 1
 | 
								echo -en "Server is going down..."
 | 
				
			||||||
		done
 | 
								game_command stop
 | 
				
			||||||
		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
 | 
							# Finish as soon as the server has shut down completely
 | 
				
			||||||
		for i in {1..100}; do
 | 
							for i in {1..100}; do
 | 
				
			||||||
| 
						 | 
					@ -358,7 +374,7 @@ server_command() {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	${SUDO_CMD} screen -S "${SESSION_NAME}" -Q select . > /dev/null
 | 
						${SUDO_CMD} screen -S "${SESSION_NAME}" -Q select . > /dev/null
 | 
				
			||||||
	if [[ $? -eq 0 ]]; then
 | 
						if [[ $? -eq 0 ]]; then
 | 
				
			||||||
		sleep 0.2 &
 | 
							sleep 0.3 &
 | 
				
			||||||
		sleep_pid=$!
 | 
							sleep_pid=$!
 | 
				
			||||||
		game_command "$@"
 | 
							game_command "$@"
 | 
				
			||||||
		${SUDO_CMD} tail -f --pid=${sleep_pid} -n 0 "${LOGPATH}/latest.log"
 | 
							${SUDO_CMD} tail -f --pid=${sleep_pid} -n 0 "${LOGPATH}/latest.log"
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue
	
	Block a user