63 lines
2.2 KiB
Bash
Executable File
63 lines
2.2 KiB
Bash
Executable File
#!/bin/bash
|
|
#
|
|
# Checkmk Local Check: Dateien/Verzeichnisse in Docker Containern pruefen
|
|
#
|
|
# Prueft per "docker exec" ob Dateien oder Verzeichnisse in einem
|
|
# Container existieren. Funktioniert fuer beides (Datei und Verzeichnis).
|
|
#
|
|
# Status-Mapping:
|
|
# Pfad existiert -> OK (0)
|
|
# Pfad fehlt -> CRITICAL (2)
|
|
# Container nicht da -> CRITICAL (2)
|
|
# Keine Docker-Rechte -> CRITICAL (2)
|
|
#
|
|
|
|
# === KONFIGURATION ===
|
|
# Format: CONTAINER_NAME_ODER_ID:PFAD1,PFAD2,PFAD3
|
|
# Es kann sowohl der Container-Name als auch die ID verwendet werden.
|
|
# Mehrere Container jeweils in einer eigenen Zeile.
|
|
CHECKS=(
|
|
"mein_container:/root/db.sql,/data,/root/irgendeinedatei"
|
|
# "e650d85ff452:/etc/nginx/nginx.conf,/var/log/nginx"
|
|
)
|
|
# ======================
|
|
|
|
# Rechte-Pruefung
|
|
if ! docker ps -a --format '{{.ID}}' >/dev/null 2>&1; then
|
|
echo "2 Docker_FileCheck - Keine Berechtigung fuer Docker oder Docker nicht verfuegbar"
|
|
exit 1
|
|
fi
|
|
|
|
for CHECK in "${CHECKS[@]}"; do
|
|
# Zeile aufsplitten in Container und Pfade
|
|
CONTAINER="${CHECK%%:*}"
|
|
PATHS="${CHECK#*:}"
|
|
|
|
# Pruefen ob Container laeuft (Name oder ID)
|
|
RUNNING=$(docker ps --filter "name=^/${CONTAINER}$" --filter "id=${CONTAINER}" --format '{{.Names}}' 2>/dev/null | head -1)
|
|
if [ -z "$RUNNING" ]; then
|
|
echo "2 Docker_Files_${CONTAINER} - Container \"${CONTAINER}\" laeuft nicht oder existiert nicht"
|
|
continue
|
|
fi
|
|
|
|
IFS=',' read -ra PATH_LIST <<< "$PATHS"
|
|
for FILEPATH in "${PATH_LIST[@]}"; do
|
|
FILEPATH=$(echo "$FILEPATH" | xargs)
|
|
# Sicherer Service-Name: Sonderzeichen ersetzen
|
|
SAFE_NAME=$(echo "${CONTAINER}_${FILEPATH}" | sed 's|[^a-zA-Z0-9_]|_|g')
|
|
SERVICE_NAME="Docker_File_${SAFE_NAME}"
|
|
|
|
if docker exec "$CONTAINER" test -e "$FILEPATH" 2>/dev/null; then
|
|
# Typ ermitteln (Datei oder Verzeichnis)
|
|
if docker exec "$CONTAINER" test -d "$FILEPATH" 2>/dev/null; then
|
|
TYPE="Verzeichnis"
|
|
else
|
|
TYPE="Datei"
|
|
fi
|
|
echo "0 ${SERVICE_NAME} - ${TYPE} ${FILEPATH} existiert in ${CONTAINER}"
|
|
else
|
|
echo "2 ${SERVICE_NAME} - ${FILEPATH} fehlt in ${CONTAINER}"
|
|
fi
|
|
done
|
|
done
|