35 lines
797 B
Bash
Executable File
35 lines
797 B
Bash
Executable File
#!/usr/bin/env bash
|
|
# Stops any running Paper server (java process running a paper-*.jar).
|
|
|
|
set -euo pipefail
|
|
|
|
STOP_TIMEOUT="${STOP_TIMEOUT:-60}"
|
|
|
|
SERVER_PIDS=$(pgrep -f "java.*paper-.*\.jar" || true)
|
|
|
|
if [[ -z "$SERVER_PIDS" ]]; then
|
|
echo "Minecraft server is not running."
|
|
exit 0
|
|
fi
|
|
|
|
for pid in $SERVER_PIDS; do
|
|
echo "Stopping Minecraft server (PID: $pid)..."
|
|
# SIGTERM lets Paper run its shutdown hook and save worlds.
|
|
kill "$pid"
|
|
done
|
|
|
|
for ((i = 0; i < STOP_TIMEOUT; i++)); do
|
|
remaining=""
|
|
for pid in $SERVER_PIDS; do
|
|
kill -0 "$pid" 2>/dev/null && remaining="$remaining $pid"
|
|
done
|
|
if [[ -z "$remaining" ]]; then
|
|
echo "Minecraft server stopped."
|
|
exit 0
|
|
fi
|
|
sleep 1
|
|
done
|
|
|
|
echo "Server did not stop within ${STOP_TIMEOUT}s; forcing:$remaining"
|
|
kill -9 $remaining
|