diff --git a/VERSION b/VERSION index 9edc58b..9f05f9f 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.6.4 +1.6.5 diff --git a/deploy/update-agent.sh b/deploy/update-agent.sh index f207aa5..a7773a5 100755 --- a/deploy/update-agent.sh +++ b/deploy/update-agent.sh @@ -151,11 +151,23 @@ sync_console_allowlist() { # artisan command that logs anything as root leaves storage/logs owned by # root, after which the application cannot append to its own log — and every # page that logs answers 500 with nothing written to say why. - # `timeout`, weil dieser Aufruf die Sperre haelt: haengt der Behaelter — + # `timeout -k`, weil dieser Aufruf die Sperre haelt: haengt der Behaelter — + # + # Das `-k 10` ist am 4. August 2026 dazugekommen, nachdem ein Lauf mit + # `timeout 45` nach VIER MINUTEN noch stand. `timeout` schickt nach der + # Frist ein SIGTERM, und `docker compose exec` stirbt daran nicht, wenn + # es auf den Docker-Daemon wartet — danach wartet `timeout` selbst + # unbegrenzt. Eine Frist ohne Nachdruck ist keine Frist, sondern eine + # Bitte. Mit `-k 10` folgt zehn Sekunden spaeter ein SIGKILL, den + # niemand ignorieren kann. + # + # Das war der Ausfall, den die Konsole als "kommt seit 08:02 nicht an die + # Arbeit" gemeldet hat: ein einziger haengender Aufruf, der die Sperre + # stundenlang hielt, waehrend jeder folgende Lauf uebersprungen wurde. # gerade neu gestartet, ueberlastet, halb tot —, haengt der Agent mit, und # jeder folgende Takt steigt still aus. Lieber diese Runde ohne Allowlist # als eine Konsole, die minutenlang nichts mehr von sich hoert. - generated="$(timeout 45 docker compose exec -T -u www-data app php artisan clupilot:console-access caddy 2>/dev/null)" || return 0 + generated="$(timeout -k 10 45 docker compose exec -T -u www-data app php artisan clupilot:console-access caddy 2>/dev/null)" || return 0 # Never write an empty matcher: in Caddy that matches nothing, and the # console would be unreachable from everywhere including the shell. grep -q '@allowed remote_ip .' <<<"$generated" || return 0 @@ -308,7 +320,7 @@ DEPLOYED_VERSION="$(release_manifest_version)" # vielen Minuten aufgibt — und haelt dabei die Sperre. Zwei Minuten sind # grosszuegig fuer einen fetch gegen EINE Gegenstelle; laenger ist kein # langsames Netz mehr, sondern eines, das nicht antwortet. -if timeout 120 git fetch --quiet --tags --force origin 2>/dev/null; then +if timeout -k 10 120 git fetch --quiet --tags --force origin 2>/dev/null; then # Newest by version order, not by tag date. Through the helper rather than # `| head -1`: head exits after one line, git takes SIGPIPE, and pipefail # ends the agent — see release_newest_tag.