Wie zum ausführen von Cronjobs öfter als einmal pro minute?
Erstellte ich eine E-Mail-Warteschlange-Datenbank-Tabelle. Ich werde fügen Sie alle E-Mails meiner PHP-Anwendung senden muss, um in diese Tabelle.
Einem anderen PHP-script sucht dann alle noch nicht gesendeten E-Mails und sendet Sie.
Ich führen Sie dieses Skript mithilfe von cronjobs. Leider cronjobs ausführen können, nur maximal einmal pro minute.
Also im schlimmsten Fall muss ein Benutzer warten Sie eine minute, bis seine E-Mail wirklich gesendet werden.
Meine aktuelle Idee für einen workaround, ruft das Skript ein zusätzliches Schlaf-parameter und der Vervielfältigung der cronjobs.
Beispiel:
* * * * * curl emails.php?sleep=0 >/dev/null 2>&1
* * * * * curl emails.php?sleep=10 >/dev/null 2>&1
* * * * * curl emails.php?sleep=20 >/dev/null 2>&1
* * * * * curl emails.php?sleep=30 >/dev/null 2>&1
* * * * * curl emails.php?sleep=40 >/dev/null 2>&1
* * * * * curl emails.php?sleep=50 >/dev/null 2>&1
Im obigen Beispiel ist das Skript laufen würde, alle 10 Sekunden. Die erste Zeile der emails.php Skript wäre:
sleep($_REQUEST['sleep']);
- Es können mehr sachkundige Menschen auf superuser.stackexchange.com.
- Sie möchten ein php-daemon, kein cron-Skript.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Für den Anfang, würde ich empfehlen, verwenden Sie die Kommandozeilen-version von PHP anstatt mit curl ein Skript aufrufen. Sie können dann erstellen Sie eine PHP-Skript mit einem sinnvollen Leben, dass nicht eingeschränkt, durch die Ausgabe einer Antwort innerhalb einer bestimmten Zeitspanne.
Als solche können Sie dann einfach schlafen/- Prüfung für E-Mails/weiterleiten/Schlaf, etc. innerhalb des PHP-Skript, anstatt unnötig mit cron.
Außerdem würde ich dafür sorgen, dass mehrere PHP-Skripte sind nicht operating in der Datenbank-Tabelle zur gleichen Zeit, entweder durch die Verwendung einer pid-Datei oder Datenbank-setting-Ansatz (wenn eine Datei/Einstellung existiert/gesetzt ist, wird der abort-Verarbeitung) oder durch sinnvolle timing der cron-job und die Begrenzung der maximalen Bearbeitungsdauer von der Skript, indem überprüft wird, wie lange es in Betrieb war-vor Beginn der "check für E-Mails" - Teil des Zyklus.
Hier ist ein einfaches bash-script, das ich geschrieben habe, das verwendet werden kann mit crontab ausführen häufiger als 1 minute.
können Sie es als ~/bin/runEvery.sh
und dann in die crontab schreiben, etwas wie das zu laufen otherScript.sh alle 5 Sekunden:
*/1 * * * * ~/bin/runEvery.sh 5 otherScript.sh
Dies ist das Skript:
Gemacht werden, auf Skript-Ebene.
Wenn Sie dies tun, alle 10 Sekunden, cron ist einfach nicht das richtige Werkzeug für den job. Was Sie brauchen, ist ein Skript, das kontinuierlich läuft, wie gezeigt, durch Ish.
Können Sie sich registrieren und das Skript als Dienst, indem Sie eine entsprechende start - /stop-Skript in /etc/init.d und es aktivieren.
Oder wenn Sie nur über ein Benutzerkonto verfügen, können Sie es in einer screen-Sitzung. Dann können Sie auch beobachten Sie die Ausgabe für die Fehlerdiagnose.