112 lines
4.9 KiB
Desktop File
112 lines
4.9 KiB
Desktop File
[Unit]
|
|
Description=MYP Kiosk Watchdog Service - Überwacht HTTPS Backend und Kiosk-Browser
|
|
Documentation=https://github.com/MYP-Druckerverwaltung
|
|
After=multi-user.target myp-https.service
|
|
Wants=myp-https.service
|
|
|
|
[Service]
|
|
Type=simple
|
|
User=root
|
|
Restart=always
|
|
RestartSec=30
|
|
ExecStart=/bin/bash -c '\
|
|
while true; do \
|
|
# Prüfe HTTPS Backend-Service (Port 443) \
|
|
if ! systemctl is-active --quiet myp-https; then \
|
|
echo "$(date): HTTPS Backend-Service nicht aktiv - starte neu" >> /var/log/kiosk-watchdog.log; \
|
|
systemctl start myp-https; \
|
|
sleep 10; \
|
|
fi; \
|
|
\
|
|
# Prüfe HTTPS Backend-Erreichbarkeit (Port 443) \
|
|
if ! curl -k -s --connect-timeout 5 https://localhost:443 >/dev/null 2>&1; then \
|
|
echo "$(date): HTTPS Backend nicht erreichbar - starte Service neu" >> /var/log/kiosk-watchdog.log; \
|
|
systemctl restart myp-https; \
|
|
sleep 15; \
|
|
fi; \
|
|
\
|
|
# Prüfe SSL-Zertifikat-Gültigkeit \
|
|
if [ -f /opt/myp/certs/localhost/localhost.crt ]; then \
|
|
if ! openssl x509 -in /opt/myp/certs/localhost/localhost.crt -noout -checkend 86400 >/dev/null 2>&1; then \
|
|
echo "$(date): SSL-Zertifikat läuft ab - regeneriere Zertifikat" >> /var/log/kiosk-watchdog.log; \
|
|
python3 -c "import sys; sys.path.insert(0, \"/opt/myp\"); from utils.ssl_config import ensure_ssl_certificates; ensure_ssl_certificates(\"/opt/myp\", True)" || true; \
|
|
systemctl restart myp-https; \
|
|
sleep 10; \
|
|
fi; \
|
|
else \
|
|
echo "$(date): SSL-Zertifikat fehlt - generiere neues Zertifikat" >> /var/log/kiosk-watchdog.log; \
|
|
python3 -c "import sys; sys.path.insert(0, \"/opt/myp\"); from utils.ssl_config import ensure_ssl_certificates; ensure_ssl_certificates(\"/opt/myp\")" || true; \
|
|
systemctl restart myp-https; \
|
|
sleep 10; \
|
|
fi; \
|
|
\
|
|
# Prüfe Kiosk-Benutzer Session \
|
|
if ! pgrep -u kiosk > /dev/null; then \
|
|
echo "$(date): Kiosk-Benutzer nicht angemeldet - prüfe Autologin" >> /var/log/kiosk-watchdog.log; \
|
|
# Versuche getty@tty1 Service zu restarten für Autologin \
|
|
systemctl restart getty@tty1.service; \
|
|
sleep 15; \
|
|
fi; \
|
|
\
|
|
# Prüfe Chromium Kiosk-Prozess \
|
|
if pgrep -u kiosk > /dev/null && ! pgrep -u kiosk -f "chromium.*kiosk" > /dev/null; then \
|
|
echo "$(date): Chromium-Kiosk nicht gefunden aber Kiosk-User aktiv - starte Browser" >> /var/log/kiosk-watchdog.log; \
|
|
# Versuche Kiosk-Service zu starten \
|
|
systemctl --user start myp-kiosk 2>/dev/null || true; \
|
|
sleep 10; \
|
|
fi; \
|
|
\
|
|
# Prüfe X-Server für Kiosk-Display \
|
|
if pgrep -u kiosk > /dev/null && ! pgrep -f "X.*:0" > /dev/null; then \
|
|
echo "$(date): X-Server nicht gefunden aber Kiosk-User aktiv - starte X" >> /var/log/kiosk-watchdog.log; \
|
|
# Versuche X-Server über Kiosk-User zu starten \
|
|
sudo -u kiosk DISPLAY=:0 startx 2>/dev/null & \
|
|
sleep 15; \
|
|
fi; \
|
|
\
|
|
# Prüfe Display-Verfügbarkeit \
|
|
if pgrep -u kiosk > /dev/null && [ -z "$(DISPLAY=:0 xdpyinfo 2>/dev/null)" ]; then \
|
|
echo "$(date): Display :0 nicht verfügbar - starte X-Session neu" >> /var/log/kiosk-watchdog.log; \
|
|
# Beende alle X-Prozesse des Kiosk-Users und starte neu \
|
|
pkill -u kiosk -f "X" 2>/dev/null || true; \
|
|
sleep 5; \
|
|
sudo -u kiosk DISPLAY=:0 startx 2>/dev/null & \
|
|
sleep 15; \
|
|
fi; \
|
|
\
|
|
# Prüfe Systemressourcen und bereinige bei Bedarf \
|
|
MEMORY_USAGE=$(free | grep Mem | awk "{print (\$3/\$2) * 100.0}"); \
|
|
if (( $(echo "$MEMORY_USAGE > 90" | bc -l) )); then \
|
|
echo "$(date): Hohe Speichernutzung ($MEMORY_USAGE%) - bereinige System" >> /var/log/kiosk-watchdog.log; \
|
|
# Bereinige Browser-Cache \
|
|
rm -rf /home/kiosk/.chromium-kiosk/Default/Cache/* 2>/dev/null || true; \
|
|
rm -rf /home/kiosk/.cache/* 2>/dev/null || true; \
|
|
# Garbage Collection \
|
|
sync; \
|
|
echo 3 > /proc/sys/vm/drop_caches 2>/dev/null || true; \
|
|
fi; \
|
|
\
|
|
# Warte 30 Sekunden vor nächster Prüfung \
|
|
sleep 30; \
|
|
done'
|
|
|
|
# Umgebungsvariablen für HTTPS-Überwachung
|
|
Environment=PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
|
|
Environment=DISPLAY=:0
|
|
Environment=PYTHONPATH=/opt/myp
|
|
Environment=SSL_CERT_FILE=/etc/ssl/certs/ca-certificates.crt
|
|
|
|
# Logging
|
|
StandardOutput=append:/var/log/kiosk-watchdog.log
|
|
StandardError=append:/var/log/kiosk-watchdog.log
|
|
|
|
# Sicherheitseinstellungen
|
|
NoNewPrivileges=false
|
|
PrivateTmp=false
|
|
ReadWritePaths=/var/log
|
|
ReadWritePaths=/opt/myp
|
|
ReadWritePaths=/home/kiosk
|
|
ReadWritePaths=/proc/sys/vm
|
|
|
|
[Install]
|
|
WantedBy=multi-user.target |