Es gibt unter Umständen zahlreiche .ini für PHP. Der Wert max_execution_time einfach auf 0 setzen oder über die CLI ausführen lassen und den Wert im Command mit dran hängen.
Wenn die CLI sagt, dass alles durchgelaufen ist und du mit system:update:finish es abgeschlossen hast, dann passt alles.
Der timeout kommt anscheinend gar nicht aus einer .ini sondern wird in Symfony irgendwo auf 300 Sekunden gesetzt.
Laut Doku ist es nicht möglich, von 6.4.20.2 auf 6.5.x.x über composer zu updaten, sodass ich wohl bei diesem Update wirklich den ersten Teil im Browser und den letzten in der Konsole anstoßen muss.
Hier aber nun meine Frage:
Die Migrationen werden ja im Browser bereits angestoßen, allerdings wird der Command ja dann wie im Fehler zu sehen später wegen timeout vorzeitig beendet.
Ist es sicher, später das entsprechende Kommando per cli erneut aufzurufen (Idempotenz)?
Ein besserer Weg fällt mir gerade aber nicht mehr ein. Meines Erachtens sollte Shopware hier nachbessern und das Timeout hoch genug ansetzen, die Migrationen von 6.5 auf 6.6 haben bei meinem Kunden im Testlauf ca. 1 Stunde gebraucht.
@Max_Shop Ich meinte tatsächlich nicht die max_execution_time für die PHP-Engine sondern einen Timeout, der in Symfony definiert ist und bei Überschreitung einen „Symfony\Component\Process\Exception\ProcessTimedOutException“ schmeißt und deshalb auf Code-Level implementiert sein muss (siehe Fehlermeldung oben sowie The Process Component (Symfony 5.x Docs)).
Deshalb halte ich Shopware für verantwortlich, diesen Timeout bei Ausführung des Kommandos hoch genug zu setzen.
Wir haben hier anscheinend keine Chance diesen Timeout mit vertretbarem Aufwand zu verändern.
In der phar:///var/www/html/shopware/public/shopware-installer.phar.php/Services/StreamedCommandResponseGenerator.php in Zeile 24 wird der Timeout des Process-Objekts auf 300 Sekunden gesetzt.
Kann man eine phar nicht einfach editieren, wie eine php Datei auch? Noch nie gemacht, aber müsste ja eigentlich gehen, da man diese auch erstellen kann.
Phar = PHP Archive, eine gezippte PHP Sammlung. Entpacken (ggf. umbenennen .phar → .zip), ändern, wieder packen (ggf. wieder umbenennen).
Nachtrag: Hab mir die Datei mal angesehen, ist scheinbar „nur“ eine riesige PHP-Datei, nicht mal gepackt. Kann man also wohl direkt bearbeiten.
Nachtrag #2: Bei mir steht gleich in Zeile 16
@ini_set('max_execution_time', '300');
vielleicht reicht das ja schon. Weiter unten in der Datei kommt dann der gezippte Teil. Ich kann es leider nicht ausprobieren, bei mir tritt der Fehler nicht auf. Ist das Hosting so langsam, 5min ist ja schon ne lange Zeit?
Diese Idee hatte ich natürlich auch direkt, ich muss nur mal prüfen, wann die Datei geladen und eingelesen wird und ob es da ein passendes Zeitfenster für die Bearbeitung gibt. Evtl. stehen ansonsten noch Integrity-Checks im Weg, falls Shopware da was eingebaut hat.
Der Server hat eine ausreichende Ausstattung, ich denke mal die Migrationen dauern bei größeren Datenbanken auf Grund der Indizierung der Tabellen so lange.
Ich habe es nun ausprobiert und beide Werte (php max_execution_time sowie den Command-Timeout von Symfony) in der phar-Datei hochgesetzt.
Das Update lief nun erfolgreich durch. Merkwürdig war nur, dass es anscheinend nach der Anzeige von Shopware „Update abgeschlossen“ noch asynchron weiter im Hintergrund gearbeitet hat (es wurden noch Datenbank-Änderungen durchgeführt; sichbtar mit „show processlist“ in mysql).
Wenn ich mich nicht irre, sind die Migrations inzwischen doch ein eigenständiger Schritt. Beim Ausführen über die CLI sollte der Schritt unendlich lange laufen.
Habe ebenfalls das Timeout-Problem beim Update. Wo und auf welchen Werte hast du den Timeout des Symfony-Commandangepasst?
Mich würde auch interessieren, auf welchen Wert du den Max_execution_time Wert gestellt hast?
Hmm, leider krieg ich die Datei nicht geöffnet.
Die Fehlermeldung beim Update-Versuch mit Installer lautete:
Fatal error: Uncaught Symfony\Component\Process\Exception\ProcessTimedOutException: The process „‚/usr/bin/php8.2‘ ‚-dmemory_limit=1G‘ ‚/home/www/…/bin/console‘ ‚system:update:finish‘ ‚–no-interaction‘“ exceeded the timeout of 300 seconds. in phar:///home/www/…/public/shopware-installer.phar.php/vendor/symfony/process/Process.php:1157
Irgend eine Idee, wie man diesen Timeout umgehen kann bzw. das Update beenden kann? Für jeden Tipp dankbar …