fix(deploy): sagen, WARUM der Dienst nicht startet
Bei einem Fehlstart zeigte das Skript `tail -30` des Logs — also das Ende eines Stacktrace, die Rahmenliste, gerade das was nichts erklaert. Jetzt wird der letzte Startversuch herausgeschnitten und daraus die Ursachenkette gezeigt; die tiefste Zeile ist die Antwort. Dazu ein Hinweis auf den einen Fall, der beim Umstieg zwangslaeufig auftritt: eine Datenbank aus der Zeit mit MODE=PostgreSQL passt nicht mehr und muss einmal weg. Ausserdem eine Neustart-Grenze in der Unit: Ohne sie laeuft ein kaputtes Deployment endlos im Kreis, `is-active` sagt dauerhaft "activating", und der eigentliche Fehler steht irgendwo weit oben im wachsenden Log. Mit ihr endet es nach fuenf Fehlstarts sichtbar in "failed". Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
dea904814b
commit
6494a7cb38
@@ -205,8 +205,25 @@ if [ "$RESTART" -eq 1 ]; then
|
|||||||
echo ' ! antwortet nicht.'; exit 1"; then
|
echo ' ! antwortet nicht.'; exit 1"; then
|
||||||
:
|
:
|
||||||
else
|
else
|
||||||
echo "==> Letzte Zeilen des Logs:" >&2
|
# Nicht `tail`: Am Ende eines Stacktrace steht die Rahmenliste, also
|
||||||
ssh "$SSH_TARGET" "export XDG_RUNTIME_DIR=\${XDG_RUNTIME_DIR:-/run/user/\$(id -u)}; tail -30 \"$DIR_SH/backend.log\" 2>/dev/null || systemctl --user status werkbaum-backend --no-pager -l | tail -30" >&2
|
# gerade das, was nichts erklärt. Gezeigt wird der **letzte Startversuch**
|
||||||
|
# und daraus die Ursachenkette — die tiefste Zeile ist die Antwort.
|
||||||
|
echo "==> Warum er nicht startet (letzter Versuch):" >&2
|
||||||
|
ssh "$SSH_TARGET" "
|
||||||
|
log=\"$DIR_SH/backend.log\"
|
||||||
|
if [ -r \"\$log\" ]; then
|
||||||
|
awk '/Starting EditorBackendApplication/ {n=NR} {z[NR]=\$0}
|
||||||
|
END {for(i=n;i<=NR;i++) print z[i]}' \"\$log\" \
|
||||||
|
| grep -E 'Caused by|ERROR' | cut -c1-200
|
||||||
|
else
|
||||||
|
export XDG_RUNTIME_DIR=\${XDG_RUNTIME_DIR:-/run/user/\$(id -u)}
|
||||||
|
systemctl --user status werkbaum-backend --no-pager -l | tail -20
|
||||||
|
fi" >&2
|
||||||
|
echo >&2
|
||||||
|
echo " Steht dort \"Schema \\\"public\\\" not found\" oder \"databasechangelog already" >&2
|
||||||
|
echo " exists\", stammt die Datenbank aus der Zeit mit MODE=PostgreSQL und passt" >&2
|
||||||
|
echo " nicht mehr (D77). Sie muss einmal weg:" >&2
|
||||||
|
echo " ssh $SSH_TARGET 'rm -rf $DIR_SH/data'" >&2
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -14,6 +14,13 @@
|
|||||||
Description=Werkbaum backend
|
Description=Werkbaum backend
|
||||||
After=network.target
|
After=network.target
|
||||||
|
|
||||||
|
# Nach fuenf Fehlstarts in fuenf Minuten gibt systemd auf. Ohne diese Grenze
|
||||||
|
# laeuft ein kaputtes Deployment endlos im Kreis: `is-active` sagt dann
|
||||||
|
# dauerhaft „activating", das Log waechst, und der eigentliche Fehler steht
|
||||||
|
# irgendwo weit oben. Mit ihr endet es sichtbar in „failed".
|
||||||
|
StartLimitIntervalSec=300
|
||||||
|
StartLimitBurst=5
|
||||||
|
|
||||||
[Service]
|
[Service]
|
||||||
Type=simple
|
Type=simple
|
||||||
WorkingDirectory=__DIR__
|
WorkingDirectory=__DIR__
|
||||||
|
|||||||
Reference in New Issue
Block a user