first alpha (v0.1)
This commit is contained in:
commit
21d58c29f7
26 changed files with 15935 additions and 0 deletions
103
check_server_status.sh
Executable file
103
check_server_status.sh
Executable file
|
|
@ -0,0 +1,103 @@
|
|||
#!/bin/bash
|
||||
|
||||
# Lade globale Konfiguration
|
||||
# Annahme: config.sh liegt im selben Verzeichnis wie dieses Skript
|
||||
CONFIG_FILE_PATH="$(dirname "$0")/config.sh"
|
||||
if [ -f "$CONFIG_FILE_PATH" ]; then
|
||||
source "$CONFIG_FILE_PATH"
|
||||
else
|
||||
# Minimales Logging, falls Haupt-Log-Funktion nicht verfügbar oder config nicht geladen werden kann
|
||||
echo "$(date '+%Y-%m-%d %H:%M:%S') - FEHLER: Globale config.sh nicht unter ${CONFIG_FILE_PATH} gefunden! Status-Skript kann nicht laufen." >> "/tmp/check_server_status_bootstrap_error.log"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# === Abgeleitete Variablen für dieses Skript ===
|
||||
SCRIPT_BASENAME=$(basename "$0" .sh)
|
||||
LOG_FILE="${LOG_DIR_BASE}/${SCRIPT_BASENAME}.log" # Eigene Log-Datei (z.B. /var/log/luweb/check_server_status.log)
|
||||
LOCK_FILE="${LOCK_FILE_BASE_DIR}/${SCRIPT_BASENAME}.lock" # Eigene Lock-Datei
|
||||
|
||||
# === Logging Funktion ===
|
||||
log_message() {
|
||||
local message_to_log
|
||||
message_to_log="$(date '+%Y-%m-%d %H:%M:%S') - $1" # Weltname nicht im Prefix, da es alle Welten prüft
|
||||
if [ -t 1 ]; then # Prüft, ob stdout ein Terminal ist
|
||||
echo "${message_to_log}" | tee -a "$LOG_FILE"
|
||||
else
|
||||
echo "${message_to_log}" >> "$LOG_FILE"
|
||||
fi
|
||||
}
|
||||
|
||||
# === Hauptlogik ===
|
||||
exec 200>"$LOCK_FILE"
|
||||
flock -n 200 || { log_message "Script ${SCRIPT_BASENAME}.sh ist bereits aktiv (Lock: ${LOCK_FILE}). Beende."; exit 1; }
|
||||
trap 'rm -f "$LOCK_FILE"; log_message "Script ${SCRIPT_BASENAME}.sh beendet."' EXIT
|
||||
|
||||
mkdir -p "$LOG_DIR_BASE" # Sicherstellen, dass Log-Verzeichnis existiert
|
||||
log_message "Script ${SCRIPT_BASENAME}.sh gestartet."
|
||||
|
||||
if ! command -v ss &> /dev/null; then
|
||||
log_message "FEHLER: 'ss' (Socket Statistics) nicht gefunden. Port-Status kann nicht geprüft werden."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# === NEU: Welt-Entdeckung aus dem Minetest-Datenverzeichnis ===
|
||||
log_message "Suche nach Welten in ${MINETESTMAPPER_WORLD_DATA_BASE_PATH}..."
|
||||
shopt -s nullglob
|
||||
world_key_dirs=("${MINETESTMAPPER_WORLD_DATA_BASE_PATH}"/*/) # Scannt Unterverzeichnisse
|
||||
shopt -u nullglob
|
||||
|
||||
if [ ${#world_key_dirs[@]} -eq 0 ]; then
|
||||
log_message "Keine Welt-Verzeichnisse in ${MINETESTMAPPER_WORLD_DATA_BASE_PATH} gefunden. Beende."
|
||||
exit 0
|
||||
fi
|
||||
|
||||
for world_data_dir in "${world_key_dirs[@]}"; do
|
||||
current_world_key=$(basename "$world_data_dir")
|
||||
world_mt_file="${world_data_dir}world.mt"
|
||||
web_conf_file="${world_data_dir}web.conf"
|
||||
|
||||
# Eine Welt wird nur geprüft, wenn sie eine world.mt und eine web.conf hat
|
||||
if [ ! -f "$world_mt_file" ] || [ ! -f "$web_conf_file" ]; then
|
||||
log_message "WARNUNG: Für Welt-Schlüssel '${current_world_key}' fehlt world.mt oder web.conf. Überspringe Status-Check."
|
||||
continue
|
||||
fi
|
||||
|
||||
# Lade Standardwerte und überschreibe mit welt-spezifischer web.conf
|
||||
# Für dieses Skript sind nur SERVER_ADDRESS und SERVER_PORT relevant
|
||||
SERVER_ADDRESS="$DEFAULT_SERVER_ADDRESS"
|
||||
SERVER_PORT="$DEFAULT_SERVER_PORT"
|
||||
source "$web_conf_file" # Lädt u.a. SERVER_ADDRESS und SERVER_PORT
|
||||
|
||||
if [ -z "$SERVER_PORT" ] || [ -z "$SERVER_ADDRESS" ]; then
|
||||
log_message "WARNUNG: Port ('${SERVER_PORT}') oder Adresse ('${SERVER_ADDRESS}') für Welt '${current_world_key}' nicht konfiguriert. Überspringe."
|
||||
continue
|
||||
fi
|
||||
|
||||
# Pfad zur online_status.txt Datei im Webverzeichnis der Welt
|
||||
status_file_dir="${WEB_ROOT_PATH}/${WEB_MAPS_BASE_SUBDIR}/${current_world_key}"
|
||||
status_file_path="${status_file_dir}/online_status.txt"
|
||||
|
||||
mkdir -p "$status_file_dir" # Stelle sicher, dass das Verzeichnis existiert
|
||||
if [ ! -d "$status_file_dir" ]; then
|
||||
log_message "FEHLER: Konnte Verzeichnis ${status_file_dir} nicht erstellen. Überspringe Welt ${current_world_key}."
|
||||
continue
|
||||
fi
|
||||
|
||||
log_message "Prüfe lokalen Port für Welt '${current_world_key}': ${SERVER_PORT}"
|
||||
|
||||
current_status="offline" # Standardmäßig offline setzen
|
||||
|
||||
# Prüfe mit 'ss -tulpn', ob der Port in der Ausgabe der lauschenden Sockets vorkommt.
|
||||
# Dies prüft, ob ein Dienst (TCP oder UDP) auf dem Port auf dem lokalen System lauscht.
|
||||
if ss -tulpn | grep -qE ":${SERVER_PORT}([[:space:]]|$)"; then
|
||||
current_status="online"
|
||||
fi
|
||||
|
||||
last_update_time=$(date '+%Y-%m-%d %H:%M:%S %Z')
|
||||
echo "${current_status} - ${last_update_time}" > "$status_file_path"
|
||||
log_message "Status für ${current_world_key} (Port ${SERVER_PORT}): ${current_status}. Datei aktualisiert: ${status_file_path}"
|
||||
|
||||
done
|
||||
|
||||
log_message "Alle konfigurierten Welten geprüft."
|
||||
exit 0
|
||||
Loading…
Add table
Add a link
Reference in a new issue