2009-06-25 14 views
2

Ich habe dieses Mail-Skript, das ich ein paar Mal ausführen muss. Um das Skript zu starten, verwende ich Cron, aber das Skript muss 2 oder 3 weitere Male laufen (mit einer Stunde auseinander).Um sleep() oder cron Job zu verwenden

Was ist der beste Weg, dies zu tun? Um den Befehl sleep für eine Stunde oder am Ende des Skripts zu verwenden, fügen Sie Code ein, damit das Skript nach einer Stunde einen neuen Cron-Job erstellt, um es selbst auszuführen.

Dank

Antwort

7

Wenn das Script nicht im Speicher gehalten wird, ist es besser, cron zu verwenden, um es nach Bedarf stündlich aufzurufen.

0 0-2 * * * /usr/local/bin/mail-script.php 

können Sie mehrere Stunden wählen, die mit - Syntax oder die Komma-Syntax:

0 0,1,2,3 * * * /usr/local/bin/mail-script.php 

Wenn es irgendeine Form von Zustand zu halten braucht, eine temporäre Datei gespeicherten Zustand zu halten verwenden.

Sie:

> man 5 crontab 

Um zu sehen, ob Ihr * nix die oben genannten Fälle behandelt.

Schließlich, wenn Sie nicht wissen, das Skript nur 2-3 Mal ausgeführt werden muss, ist es besser dran, die Logik darüber, ob "Ausführen oder nicht ausführen" im PHP-Skript selbst, und dann einfach ausführen es jede Stunde.

0

Ich bin nicht sicher, entweder Ansatz (für eine Stunde schlafen, oder cron-Jobs von PHP erstellen) ist ideal, wie über einen cron-Job, der ohnehin jede Stunde läuft, dann Skript prüft Ihre PHP, ob es sollte laufen?

0

Warum nicht einfach die Cron-Kriterien festlegen, damit diese bestimmten Zeiten ausgelöst werden? Cron ist in diesem Aspekt ziemlich flexibel.

Aktualisieren Sie Ihre Frage mit wann Sie es abfeuern möchten und ich kann ein Beispiel geben.

2

Ein Vorteil der Verwendung von sleep() ist, dass es tragbarer sein könnte. Auf vielen Systemen, mit denen ich arbeite, dürfen Benutzer beispielsweise keine eigenen Cron-Jobs haben. Daher kann es von Vorteil sein, wenn Sie Ihr Programm so schreiben, dass es auf seine eigene Timer-Zeit achtet.

Eine Alternative zu schlafen() SIGALRM verwenden könnte (so fängt das Skript einen Interrupt und führt den Code in einem bestimmten Intervall -., Wenn das Interrupt ausgelöst wird)

ich meine, würde ich empfehlen, cron - aber hier sind einige Alternativen!