Fix: Update-Modal wartet auf [DONE]-Marker im Log bevor done-State angezeigt wird
parent
d84537b343
commit
3e157f4e56
|
|
@ -34,12 +34,24 @@ class UpdateModal extends ModalComponent
|
||||||
$st = @trim(@file_get_contents(self::STATE_DIR.'/state') ?: '');
|
$st = @trim(@file_get_contents(self::STATE_DIR.'/state') ?: '');
|
||||||
$rcRaw = @trim(@file_get_contents(self::STATE_DIR.'/rc') ?: '');
|
$rcRaw = @trim(@file_get_contents(self::STATE_DIR.'/rc') ?: '');
|
||||||
|
|
||||||
|
// Log einlesen
|
||||||
|
$lines = @file(self::LOG, FILE_IGNORE_NEW_LINES) ?: [];
|
||||||
|
|
||||||
|
// Nur als "done" gelten wenn [DONE]-Marker im Log steht —
|
||||||
|
// verhindert dass das Modal fertig zeigt während das Script noch läuft
|
||||||
|
$logDone = in_array('[DONE]', array_map('trim', $lines), true);
|
||||||
|
|
||||||
|
if ($st === 'done' && !$logDone) {
|
||||||
|
$st = 'running'; // Noch warten bis Log vollständig
|
||||||
|
}
|
||||||
|
|
||||||
$this->state = $st ?: 'unknown';
|
$this->state = $st ?: 'unknown';
|
||||||
$this->rc = is_numeric($rcRaw) ? (int)$rcRaw : null;
|
$this->rc = is_numeric($rcRaw) ? (int)$rcRaw : null;
|
||||||
|
|
||||||
// Log einlesen
|
$this->tail = array_slice(
|
||||||
$lines = @file(self::LOG, FILE_IGNORE_NEW_LINES) ?: [];
|
array_filter($lines, fn($l) => trim($l) !== '[DONE]'),
|
||||||
$this->tail = array_slice($lines, -30);
|
-30
|
||||||
|
);
|
||||||
|
|
||||||
$last = trim($this->tail ? end($this->tail) : '');
|
$last = trim($this->tail ? end($this->tail) : '');
|
||||||
$last = preg_replace('/^\[\w\]\s*/', '', $last);
|
$last = preg_replace('/^\[\w\]\s*/', '', $last);
|
||||||
|
|
|
||||||
|
|
@ -369,10 +369,10 @@ _cleanup() {
|
||||||
sudo -u "${APP_USER}" php "${APP_DIR}/artisan" optimize:clear 2>&1 || true
|
sudo -u "${APP_USER}" php "${APP_DIR}/artisan" optimize:clear 2>&1 || true
|
||||||
sudo -u "${APP_USER}" php "${APP_DIR}/artisan" optimize 2>&1 || true
|
sudo -u "${APP_USER}" php "${APP_DIR}/artisan" optimize 2>&1 || true
|
||||||
fi
|
fi
|
||||||
# Kurz warten damit das tee-Pipe den Log vollständig schreibt
|
# [DONE] direkt ins Log-File schreiben (am tee-Pipe vorbei) damit
|
||||||
# bevor der State auf "done" gesetzt wird
|
# die Reihenfolge garantiert ist: Log hat [DONE] bevor state=done sichtbar ist
|
||||||
sleep 2
|
|
||||||
mkdir -p "$STATE_DIR"
|
mkdir -p "$STATE_DIR"
|
||||||
|
printf '[DONE]\n' >> "$LOG_FILE" 2>/dev/null || true
|
||||||
echo "done" > "$STATE_DIR/state"
|
echo "done" > "$STATE_DIR/state"
|
||||||
echo "$rc" > "$STATE_DIR/rc"
|
echo "$rc" > "$STATE_DIR/rc"
|
||||||
rm -f "$LOCK_FILE"
|
rm -f "$LOCK_FILE"
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue