#!/bin/sh # If exists tmux session # If Responds to queries SERVER_DIR='/home/ubuntu/minecraft/servers/kincls' TMUX_NAME='minecraft kincls server' EMPTY_COUNTER="$SERVER_DIR/empty_counter.txt" json_parse() { cat - | python3 -c "import sys, json; print(json.load(sys.stdin)['$1'])" } silent_exitcode() { $* > /dev/null 2>&1 } empty_count() { if [ ! -f "$EMPTY_COUNTER" ]; then # File not existing echo "0" else cat "$EMPTY_COUNTER" fi } empty_incr() { c="$(empty_count)" if [ "$c" -gt 10 ]; then echo "Server empty for more than 10 minutes, shutting down" empty_reset # Needs to be 0 next time server starts tmux send-keys -t "$TMUX_NAME.0" "stop" ENTER sleep 5 $(sudo /sbin/shutdown -P +1) else echo "Empty count $c. Incrementing" echo "$((c+1))" > "$EMPTY_COUNTER" fi } empty_reset() { echo "Resetting empty counter" echo 0 > "$EMPTY_COUNTER" } tmux_running() { tmux ls -F "#{session_name}" | grep -q "$TMUX_NAME" } server_responsive() { silent_exitcode mcstatus localhost ping } n_logins="$(w -h | wc -l)" echo "$(date) [$n_logins logins]" if tmux_running; then : #echo "Tmux running" else echo "Tmux not running" empty_incr exit 1 fi if server_responsive; then n_players=$(mcstatus localhost json | json_parse player_count) echo "Server responsive. $n_players players online" if [ "$n_players" -gt 0 ] || [ "$n_logins" -gt 0 ]; then # Keep alive if players or ssh sessions active empty_reset else empty_incr exit 1 fi else echo "Server unresponsive" empty_incr exit 1 fi