NGINX 504 Timeout
Tobias
- php
- webserver
Hallo zusammen,
ich habe ein Problem mit einem NGINX 504 Timeout.
Ich habe ein PHP Script, welches jede Nach bei Cron gestartet wird. Leider wird das Script nicht beendet, weil es wohl ein 504 Timeout gibt. Ich habe bereits alle mögliche Parameter erhöht, allerdings ändert sich da nichts...jemand eine Idee?
Folgende Werte habe ich bereits erhöht
proxy_connect_timeout 3600;
proxy_send_timeout 3600;
proxy_read_timeout 3600;
send_timeout 3600;
fastcgi_read_timeout 3600;
request_terminate_timeout = 3600
max_execution_time = 3600
Hi,
Ich habe ein PHP Script, welches jede Nach bei Cron gestartet wird. Leider wird das Script nicht beendet, weil es wohl ein 504 Timeout gibt.
Hm. Muß das Script denn per http(s) gestartet werden? Oder könnte das auch direkt per php deinscript.php
laufen? Dann wäre der nginx aus dem Spiel …
cu,
Andreas a/k/a MudGuard
Also ich starte es über localhost, aber nur über PHP geht leider nicht :/
Tach!
Also ich starte es über localhost, aber nur über PHP geht leider nicht :/
Was genau benötigt denn da unbedingt einen HTTP-Request? Und gibt es keine Logfile-Einträge, die etwas genauer als "504" sind?
dedlfix.
Also ich starte es über localhost, aber nur über PHP geht leider nicht :/
Was genau benötigt denn da unbedingt einen HTTP-Request?
Womöglich wird $_SERVER
oder $_GET
befragt ... nur habert es da an dem "un-be-dingt" - denn die Variablen bzw. Arrays kann man ja auch selbst belegen.
Meine Lösung wäre, wenn es denn an der Laufzeit liegt, das Skript dadurch zu starten, dass man es im Hintergrund durch batch
(at
), cron
, nohup
oder dergleichen ausführt und die Resultate per Mail verschickt oder halt in einer abrufbaren Datei speichert.
Beipiel:
<?php
$cmd='echo "/pfad/zu/php-cli /pfad/zu/skript.php" | batch';
echo "Gestartet wird: $cmd";
echo `$cmd 2>&1`;
Zu den fehlenden Informationen:
Hello,
Ich habe ein PHP Script, welches jede Nach bei Cron gestartet wird. Leider wird das Script nicht beendet, weil es wohl ein 504 Timeout gibt.
Hm. Muß das Script denn per http(s) gestartet werden? Oder könnte das auch direkt per
php deinscript.php
laufen? Dann wäre der nginx aus dem Spiel …
Bei solch langen Laufzeiten könnte man das Script auf einem Linuxhost auch per https-Request (PHP-Startscript) aufrufen und in den Hintergrund stellen. Dann ist der http-Request auch schnell fertig.
Die Prozess-ID sollte man sich in einer Kontrolldatei merken und vom Langläufer dort am Ende (shutdown-function) wieder entfernen lassen. Mittel Kontrollscript kann man dann auch nachschauen, welcher Prozess noch lebt.
Klingt umständlich, ist aber eine probate Methode, die http-Connections schnell wieder freizugeben.
Bei NGINX gehe ich jetzt von Linux aus, oder gibt es den auch für Windows?
Aber, wenn es denn per Cron gestartet wird, was hat dann der NGINX damit zu tun?
Glück Auf
Tom vom Berg