Frage

Ich versuche, mit einer Liste der verschiedenen Ansätze zu entwickeln, um geplante Tasks auf PHP laufen. Meine Absicht ist es, eine universelle Art und Weise ausgeführt werden geplante Aufgaben in PHP zu bieten. Bisher habe ich:

1) Analyse der Website-Traffic. Wenn Sie einen Tag 770 Treffer zu erhalten (die pro 2 Minuten ein Hit ist), und geplant Sie eine Aufgabe, um 6:00 Uhr zu laufen und ein Besucher eine Seite, um 5:59 Uhr aufgefordert, führen Sie dann die Aufgabe, weil der nächste Besucher werden in 6.01 im Durchschnitt kommen. Run = exec ( '/ usr / bin / php -f /home/account/cron.php') in diesem Fall.

(+) funktioniert auf allen Plattformen, solange die Pfade korrekt sind.

(-). Erfordert eine CPU-Leistung

(-). Benötigt exec ()

(-). Ist das nicht genau auf kleinere Websites oder auf Websites mit großen Verkehrsspitzen

2) Verbesserte Version der oben genannten. Wenn der Benutzer fordert die Seite und die Aufgabe soll laufen, nicht exec () verwenden, aber include (), nachdem Sie die Inhalte an den Benutzer geleert haben.

(+) funktioniert auf allen Plattformen.

(+) Kein exec () 's.

(-). Erfordert eine CPU-Leistung

(-). Ist das nicht genau auf kleinere Websites oder auf Websites mit großen Verkehrsspitzen

3) einen separaten Prozess Hintergrund ausgeführt, so dass es in einer Endlosschleife läuft. Geben Sie ein Admin-Interface, das die Sie „Start“ und „Ende“ der „Service“ lassen. Es wird dann mit fsockopen () eine .php-Skript aufrufen, die unendlich läuft. Es verwendet Schlaf (), um keine Ressourcen zu verbrauchen und bis zu wecken, wenn der richtige Zeitpunkt gekommen ist (siehe: time_sleep_until ()). Es könnte nach Dateien suchen und lesen, sie zu verstehen, wenn, welche Aufgaben auszuführen. Man könnte Datei "run-Alltag-03.00" erstellen, die den Scheduler macht den Code innerhalb davon laufen.

(+) funktioniert auf allen Plattformen.

(+) Kein exec () 's.

(+) ziemlich genau sein (zum Beispiel, wenn es pro Minute Grundlage schläft).

(-) ist nicht stabil - a. Server zum Absturz bringen den Scheduler stoppt vollständig

(-)? Einige Hosts wie keinen Prozess läuft 24/7/365 = Ressource Schwein haben

4) Ausführen exec ( 'crontab') direkt auf Linux und gleichermaßen.

(+) Es ist nicht eine Ressource Schwein.

(+) korrekt.

(-). Exec ()

(-). Ist nicht auf allen Plattformen funktionieren

5) Bitte um cPanel Anmeldeinformationen und machen eine POST, um es zu erstellen / Verwaltung / entfernen crons.

(+) Ist genau

(+) Es ist nicht eine Ressource Schwein.

(-) Bad für Sicherheit

(-) Erfordert Benutzerdaten = verringerte Nutzbarkeit

(-) Funktioniert nicht auf allen Plattformen (erfordert cPanel, die nicht unter Windows funktioniert)

.

(-). Benötigt cPanel

Jede andere Ideen?

War es hilfreich?

Lösung

Fast alle Methoden, die Sie vorgeschlagen sind hässlich, obwohl die meisten funktionieren.

Meine hässliche Alternative ist cron auf einem lokalen Computer mit Internet-Konnektivität einzurichten, die eine Locke Befehl immer einige Minuten läuft.

Es ist nur so hässlich wie alle Ihre Lösungen, aber es ist etwas zuverlässiger.

Andere Tipps

Ich benutze ein Windows-Tool VisualCron genannt http-Passwort-geschützte Skripte auf Remote-Servern ping, die dann bestimmte Aufgaben auszuführen. V-C nette E-Mail-Statusmeldungen hat sich als gut gebaut.

Beachten Sie, dass dies zu Zacks Post sehr ähnlich ist über lokalen cron + curl oder cron + wget

http://www.visualcron.com http://www.visualcron.com/img/screenshots/v5/ Hauptfenster / mainwindow_bluetheme.png

Haben Sie jemals Windows-Taskplaner oder die auf Befehl ? Es ist möglich, es als Alternative zu Cron auf UNIX zu verwenden. Sie können (1) einen PHP-Skript schreiben, das alle notwendigen Aufgaben (2) führt einen cron-Job auf UNIX einrichten oder geplante Tasks auf Windows dieses Skript über PHP CLI auszuführen.

Es ist auch möglich, das Skript auszuführen, indem von HTTP von einem entfernten Rechner zu öffnen. Das entfernte Gerät kann eine UNIX- oder Windows-Box sein. wget kann anstelle eines Web-Browser verwendet werden, und es ist für beide Plattformen zur Verfügung.

Ich würde für einen zweiten Server / virtuellen Maschine entscheiden, diese Art von geplanten Aufgaben auszuführen. Der zweite Server kann Offsite sein und andere Funktionen ausführen, wie benachrichtigen Sie, wenn Ihre primären Server nicht mehr reagiert, etc.

Übrigens, was ist Ihre Definition von "genau?"

IMHO, sollten Sie eine Ebene über diese Methoden schreiben ...

User code <=> [User interface]<-> Your library <->[Technology interface] <=> Technology execution module (method)

Dann müssen Sie nicht alle Methoden implementieren, aber wenn Sie oder Ihr Kunde eine neue Methode brauchen ... alles, was er ist hat zu tun, ist Ihre Technologie-Schnittstelle zu implementieren.

BTW, die „Technologie-Ausführungsverfahren“ können als PHP-Modul für eine bessere Leistung / Host-Systemintegration geschrieben werden.

Wenn ich Sie wäre, würde ich nach einer vorhandenen Bibliothek / Modul, und ich würde nicht einen Hintergrundprozess, wenn das zugrunde liegende System erstellen können keine geplanten Aufgaben bewältigen (Unix und Windows sie gehe).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top