Ich führe ein PHP-Skript in einem Cronjob aus und möchte alle 5 Minuten E-Mails senden
Mein aktueller (crontab) Cronjob:
10 * * * * /usr/bin/php /mydomain.in/cromail.php > /dev/null 2>&1
Die cronmail.php lautet wie folgt:
<?php
$from = 'D'; // sender
$subject = 'S';
$message = 'M';
$message = wordwrap($message, 70);
mail("[email protected]", $subject, $message, "From: $from\n");
?>
Aber ich habe seit 30 Minuten keine E-Mail mit dieser Konfiguration erhalten.
cromail.php
odercronmail.php
?Antworten:
In einer
crontab
Datei lauten die Felder:So:
bedeutet ausführen
blah
um 10 Minuten nach jeder Stunde .Wenn Sie alle fünf Minuten möchten, verwenden Sie entweder:
bedeutet jede Minute, aber nur jede fünfte, oder:
für ältere
cron
ausführbare Dateien, die die*/x
Notation nicht verstehen .Wenn es danach immer noch nicht funktioniert, ändern Sie den Befehl in:
und überwachen Sie diese Datei, um sicherzustellen, dass alle fünf Minuten etwas geschrieben wird. Wenn ja, stimmt etwas mit Ihren PHP-Skripten nicht. Wenn nicht, stimmt etwas mit Ihrem
cron
Daemon nicht.quelle
Ihr CRON sollte folgendermaßen aussehen:
*/5 * * * *
CronWTF ist sehr nützlich, wenn Sie Ihre CRON-Einstellungen testen müssen.
Es könnte eine gute Idee sein, die Ausgabe in eine Protokolldatei zu leiten, damit Sie sehen können, ob Ihr Skript auch Fehler auslöst - da Sie diese in Ihrem Terminal nicht sehen.
Versuchen Sie auch, einen Shebang oben in Ihrer PHP-Datei zu verwenden, damit das System weiß, wo sich PHP befindet. Sowie:
#!/usr/bin/php
Auf diese Weise können Sie das Ganze so nennen
*/5 * * * * php /path/to/script.php > /path/to/logfile.log
quelle
Sie stellen Ihren Cron so ein, dass er jede Stunde in der 10. Minute läuft.
Zum Einstellen auf
every 5 mins
ändern*/5 * * * * /usr/bin/php /mydomain.in/cronmail.php > /dev/null 2>&1
quelle
usr/bin/php
Teil*/5 * * * * /usr/bin/php /mydomain.in/cromail.php > /dev/null 2>&1
Wenn Sie alle
n
Minuten einen Cron ausführen möchten , gibt es je nach Wert von einige mögliche Optionenn
.n
teilt 60 (1, 2, 3, 4, 5, 6, 10, 12, 15, 20, 30)Hier ist die Lösung einfach, indem die
/
Notation verwendet wird:Stellt oben
n
den Wert darn
undm
stellt einen Wert dar, der kleiner alsn
oder ist*
. Dadurch wird der Befehl minutengenau ausgeführtm,m+n,m+2n,...
n
teilt NICHT 60Wenn
n
60 nicht geteilt wird, können Sie dies mit cron nicht sauber machen, aber es ist möglich. Dazu müssen Sie einen Test in das Cron einfügen, in dem der Test die Zeit überprüft. Dies geschieht am besten, wenn Sie sich den UNIX-Zeitstempel ansehen, die Gesamtzahl der Sekunden seitdem1970-01-01 00:00:00 UTC
. Nehmen wir an, wir möchten den Befehl zum ersten Mal ausführen, wenn Marty McFly in Riverdale ankommt, und ihn dann allen
Minuten später wiederholen .Damit ein Cronjob jede
42
Minute nach "2015-10-21 07:28:00" ausgeführt wird, sieht der Crontab folgendermaßen aus:mit
minutetestcmd
definiert alsAnmerkung: Die UNIX-Zeit wird nicht durch Schaltsekunden beeinflusst
Bemerkung:
cron
hat keine Genauigkeit von weniger als einer Sekundequelle
m/n
Notation scheint auf meinen Systemen nicht zu funktionieren (Debian 9, Ubuntu 16.04). Funktioniert nur*/n
. Zum Beispiel5/5
oder4/10
geben SieError: bad minute; while reading /etc/crontab
in syslog (in Ubuntu mit cron v. 3.0pl1-128ubuntu2). Wurde diese M / N-Notation aufgegeben oder ist sie nur in einigen Systemen verfügbar?m-59/n
. Nur ein Bereich kann eine Schrittgröße haben. (sieheman 5 crontab
). Ich habe die Antwort aktualisiert2 Schritte, um zu überprüfen, ob ein Cronjob funktioniert:
Führen Sie den Befehl php manuell aus:
/ usr / bin / php /mydomain.in/cromail.php
Und prüfen Sie, ob ein Fehler angezeigt wird
quelle
Um x Minuten festzulegen, müssen Sie im ersten Argument x Minuten und dann den Pfad Ihres Skripts festlegen
Für 15 Minuten
quelle