[Unit] Description=dossiers.ngi branch-status JSON + on-demand edition rebuild Documentation=file:%h/src/koopa/koopa-admin-log/scripts/dossiers-ngi/README.md After=default.target [Service] Type=oneshot Nice=10 RemainAfterExit=no # Full freezes per changed tip can take a while; skip overlap via flock TimeoutStartSec=1h Environment=TZ=Europe/Zurich Environment=ADMIN_LOG=%h/src/koopa/koopa-admin-log Environment=TDPD_ROOT=%h/git/src/ngi/tech-dossier-project-data Environment=OUT=/var/www/monitoring-sites/dossiers.ngi.hacktivism.ch/branch-status.json Environment=EDITIONS_ROOT=/var/www/monitoring-sites/dossiers.ngi.hacktivism.ch/editions # Rebuild only when .edition-tip differs / missing (never force from timer) Environment=REBUILD=1 EnvironmentFile=-%h/.config/dossiers-ngi/branch-status.env # flock -n: second fire while busy exits 0 without stacking garbage ExecStart=/usr/bin/flock -n %t/dossiers-ngi-branch-status.lock /usr/bin/python3 %h/src/koopa/koopa-admin-log/scripts/dossiers-ngi/branch-status-hourly.py --rebuild SuccessExitStatus=0 1 [Install] WantedBy=default.target