#!/bin/bash # James Chambers - March 2nd 2019 # Minecraft Server stop script - primarily called by minecraft service but can be ran manually # Check if server is running if ! screen -list | grep -q "mcs"; then echo "Server is not currently running!" exit 1 fi # Stop the server #if [ "$1" == "announce" ]; then echo "Sending stop notifications to server..." screen -Rd mcs -X stuff "say Server is stopping in 30 seconds! $(printf '\r')" sleep 23s screen -Rd mcs -X stuff "say Server is stopping in 7 seconds! $(printf '\r')" sleep 1s screen -Rd mcs -X stuff "say Server is stopping in 6 seconds! $(printf '\r')" sleep 1s screen -Rd mcs -X stuff "say Server is stopping in 5 seconds! $(printf '\r')" sleep 1s screen -Rd mcs -X stuff "say Server is stopping in 4 seconds! $(printf '\r')" sleep 1s screen -Rd mcs -X stuff "say Server is stopping in 3 seconds! $(printf '\r')" sleep 1s screen -Rd mcs -X stuff "say Server is stopping in 2 seconds! $(printf '\r')" sleep 1s screen -Rd mcs -X stuff "say Server is stopping in 1 second! $(printf '\r')" sleep 1s #fi echo "Stopping Minecraft server ..." screen -Rd mcs -X stuff "say Closing server (stop.sh called)...$(printf '\r')" screen -Rd mcs -X stuff "stop$(printf '\r')" # Wait up to 30 seconds for server to close StopChecks=0 while [ $StopChecks -lt 30 ]; do if ! screen -list | grep -q "mcs"; then break fi sleep 1; StopChecks=$((StopChecks+1)) done # Force quit if server is still open if screen -list | grep -q "mcs"; then echo "Minecraft server still hasn't closed after 30 seconds, closing screen manually" screen -S mcs -X quit fi echo "Minecraft server stopped." # Sync all filesystem changes out of temporary RAM sync