Ich habe ein PHP-Skript, das ein Verzeichnis überprüft und alle Dateien löscht, die nicht innerhalb von 15 Sekunden geändert wurden (es ist für ein Spiel).
Mein Problem ist, wie man dieses Skript die ganze Zeit laufen lässt. Ich habe einen Cron-Job eingerichtet, der alle 10 Minuten ausgeführt wird, und dann habe ich im PHP-Skript eine Endlosschleife mit einem Schlafmodus (10). Mein Gedanke war, dass es den Code alle 10 Sekunden ausführen würde und in dem Fall, dass das Skript gestoppt wird, würde der Cron-Job es schließlich neu starten.
Nach dem Start des Skripts wird es jedoch für ungefähr 3 Schleifen (30 Sekunden) ausgeführt und dann gestoppt. Ich habe gehört, dass PHP nur so viel Speicher pro Datei lädt.
Wie kann ich diese PHP-Skript-Schleife unbegrenzt machen? Vielleicht gibt es eine Möglichkeit, sich selbst zu nennen
Sie können einen übergeordneten php-Prozess ausführen, der in einem Intervall einen Client ausgibt. Wenn Sie neugierig sind, es als eine Option zu erkunden, ist hier ein guter Ausgangspunkt: Ссылка Schön, dass es so ist, ist das Der übergeordnete Prozess kann Client-PIDs beenden, die nicht innerhalb eines angemessenen Zeitraums enden.
Wenn Sie nach etwas schnell und dreckig suchen, könnten Sie ein Bash-Skript schreiben, um den PHP ziemlich leicht aufzurufen (wenn Sie unter Linux sind):
%Vor%BEARBEITEN Sie brauchen nicht wirklich das Skript, bash wird alles in einer Zeile tun:
%Vor% Stellen Sie sicher, dass Ihre PHP-Programmdatei für die Verwendung als Befehlszeileninterpreter und nicht als CGI-Programmdatei kompiliert ist. PHP killt normalerweise Skripte, die länger als max_execution_time
laufen (Standard ist 30 Sekunden). CLI-Executables erzwingen diese Einschränkung jedoch nicht.
Weitere Informationen zu CLI vs. CGI SAPIs.
Sie können das SAPI Ihrer ausführbaren Datei überprüfen, indem Sie das Argument --version
verwenden:
Vielleicht möchten Sie Ihren Parameter max_execution_time in der Datei php.ini überprüfen. Ich glaube, der Standardwert ist 30 Sekunden. Wie Sie es mit cron eingerichtet haben, haben Sie wahrscheinlich mehrere Instanzen des Skripts nach 10 Minuten ausgeführt, es sei denn, Sie fügen einige Logik im Skript hinzu, um zu überprüfen, dass eine Instanz von sich selbst nicht bereits ausgeführt wird
PHP als Sprache ist nicht sehr gut darin, unbegrenzt zu laufen. Da Sie alle zehn Minuten einen Cron-Job haben, warum führen Sie Ihre Aufgabe nicht 60 Mal aus und verlassen sie dann?
Außerdem hat PHP auf den meisten Linux-Servern verschiedene Konfigurationsdateien für CLI und für Apache-Modi. Es könnte also sinnvoll sein, Ihre etc / php / cli / php.ini zu überprüfen und die maximale Ausführungszeit und Speichergrenzen zu überprüfen.
brechen Sie die Schleife ab und führen Sie sich erneut aus, bevor Sie nicht mehr über genügend Speicher verfügen exec ("/ usr / bin / php". DATEI );
Es gibt ein PEAR-Modul zum Schreiben lang laufender PHP-Skripte. Ich habe es aber selbst nicht benutzt.
Tags und Links php infinite-loop cron