Watchdog systemd + fix stabilité kiosk/backend
- Watchdog (30s) : vérifie backend, caméra, chromium, tue les orphelins, reboot auto après 10 échecs consécutifs (~5min sans service) - kiosk-session.sh : tue les backends orphelins au démarrage, trap EXIT pour cleanup quand le kiosk est tué - camera.py : force release USB avec timeout 2s quand connecter() échoue - main.py : uvicorn.run(app) au lieu de string pour éviter double import Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -1,13 +1,12 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Verrou : une seule instance autorisée
|
||||
LOCK=/tmp/photobooth-kiosk.lock
|
||||
if [ -f "$LOCK" ] && kill -0 "$(cat $LOCK)" 2>/dev/null; then
|
||||
echo "[kiosk] Déjà en cours (pid $(cat $LOCK)), abandon."
|
||||
exit 0
|
||||
fi
|
||||
echo $$ > "$LOCK"
|
||||
trap "rm -f $LOCK" EXIT
|
||||
# Verrou atomique — une seule session kiosk autorisee
|
||||
exec 9>/tmp/photobooth-kiosk.lock
|
||||
flock -n 9 || { echo "[kiosk] Déjà en cours, abandon."; exit 0; }
|
||||
|
||||
# Tuer tout backend orphelin d'une session precedente
|
||||
pkill -f 'python.*backend.main' 2>/dev/null || true
|
||||
sleep 1
|
||||
|
||||
xset s off
|
||||
xset -dpms
|
||||
@@ -16,24 +15,15 @@ xset s noblank
|
||||
# Automount USB (pour la photostation)
|
||||
udiskie --no-notify --no-appindicator &
|
||||
|
||||
# Libérer le DSLR : gvfsd-gphoto2 (GNOME) le monopolise sinon
|
||||
# Liberer le DSLR : gvfsd-gphoto2 (GNOME) le monopolise sinon
|
||||
pkill -f gvfsd-gphoto2 2>/dev/null || true
|
||||
pkill -f gvfs-gphoto2-volume-monitor 2>/dev/null || true
|
||||
sleep 1
|
||||
|
||||
# Backend en boucle : redémarre automatiquement s'il plante
|
||||
# Backend en boucle : redemarre automatiquement s'il plante
|
||||
_backend_loop() {
|
||||
while true; do
|
||||
# Mode maintenance : attendre la fin de l'intervention
|
||||
while [ -f /tmp/photobooth-maintenance ]; do sleep 2; done
|
||||
# Vérifier qu'aucun autre backend ne tourne (éviter les doublons)
|
||||
if pgrep -f "python.*backend.main" > /dev/null 2>&1; then
|
||||
echo "[kiosk] backend déjà en cours, attente..."
|
||||
sleep 5
|
||||
continue
|
||||
fi
|
||||
cd /home/jules/photobooth
|
||||
# Mise à jour automatique depuis Gitea
|
||||
git pull --ff-only 2>&1 | logger -t photobooth-git
|
||||
source .venv/bin/activate
|
||||
authbind --deep python -m backend.main 2>&1 | tee -a /tmp/photobooth-backend.log
|
||||
@@ -42,14 +32,18 @@ _backend_loop() {
|
||||
done
|
||||
}
|
||||
_backend_loop &
|
||||
BACKEND_LOOP_PID=$!
|
||||
|
||||
# Attendre que le backend soit prêt (max 15s)
|
||||
# Nettoyer le backend si le kiosk est tue
|
||||
trap "kill $BACKEND_LOOP_PID 2>/dev/null; pkill -f 'python.*backend.main' 2>/dev/null" EXIT
|
||||
|
||||
# Attendre que le backend soit pret (max 15s)
|
||||
for i in $(seq 1 15); do
|
||||
curl -sf http://localhost/ > /dev/null 2>&1 && break
|
||||
sleep 1
|
||||
done
|
||||
|
||||
# Chromium en boucle : redémarre s'il plante, attend si photostation active
|
||||
# Chromium en boucle : redemarre s'il plante, attend si photostation active
|
||||
while true; do
|
||||
while [ -f /tmp/photostation_running ]; do sleep 1; done
|
||||
chromium \
|
||||
|
||||
Reference in New Issue
Block a user