Ich möchte überprüfen, ob eine bestimmte crontab richtig funktioniert. Ich habe einen Job wie diesen hinzugefügt:
*/2 * * * * /path_to_my_php_script/info.php >/dev/null 2>&1
Ich weiß, dass ich auf das Null-Gerät umleite, aber ich bin nicht sicher, ob der obige Befehl gut ist.
*Edit 1: In meinem /var/log/syslog habe ich alle zwei Minuten den folgenden Fehler:
(CRON) error (grandchild #2788 failed with exit status 2)
*Edit 2: Keine Fehler in den Protokollen mit diesem neuen Job:
*/2 * * * * /usr/bin/php /path_to_my_php_script/info.php >/dev/null 2>&1
Die Syntax für den crontab-Eintrag sieht korrekt aus. Wenn Sie Ihre crontab mit "crontab -e
" bearbeiten (was Sie tun sollten), erhalten Sie einen Fehler, wenn Sie einen syntaktisch ungültigen crontab-Eintrag angeben.
Erstens: Läuft /path_to_my_php_script/info.php
auf der Kommandozeile korrekt?
Wenn ja, läuft es dann auch korrekt so?:
/bin/sh -c "(export PATH=/usr/bin:/bin; /path_to_my_php_script/info.php </dev/null)"
Wenn das funktioniert, funktioniert es dann auch so?
/bin/sh -c "(export PATH=/usr/bin:/bin; /path_to_my_php_script/info.php </dev/null >/dev/null 2>&1)"
Schritt (3) ähnelt der Art und Weise, wie cron Ihr Programm ausführt (wie in "man 5 cron" dokumentiert).
Das wahrscheinlichste Problem, das Sie haben, ist, dass der PATH, den cron zur Ausführung Ihres Programms verwendet, zu restriktiv ist. Fügen Sie daher am Anfang Ihres crontab-Eintrags etwas wie das Folgende ein (Sie müssen alle Verzeichnisse hinzufügen, die Ihr Skript benötigt):
PATH=~/bin:/usr/bin/:/bin
Beachten Sie auch, dass cron standardmäßig /bin/sh
verwendet, nicht bash. Wenn Sie Bash benötigen, fügen Sie dies ebenfalls am Anfang Ihrer crontab-Datei hinzu:
SHELL=/bin/bash
Beachten Sie, dass diese beiden Änderungen alle crontab-Einträge betreffen. Wenn Sie diese Werte nur für Ihr "info.php"-Programm ändern wollen, können Sie so vorgehen:
*/2 * * * * /bin/bash -c ". ~/.bashrc; /path_to_my_php_script/info.php"
Es ist auch erwähnenswert, dass auf einem System, das für "mail" konfiguriert ist (mit anderen Worten ein System, das einen MTA konfiguriert hat [sendmail/postfix/etc]), alle Ausgaben von crontab-Programmen automatisch per E-Mail an Sie gesendet werden. Ein Standard-Ubuntu-Desktop-System wird keine lokale E-Mail konfiguriert haben, aber wenn Sie auf einem Server arbeiten, können Sie einfach "mail" in einem Terminal eingeben, um all diese Cron-Mails zu sehen. Dies gilt auch für den Befehl "at
".
Leiten Sie die Fehlerausgabe nicht nach /dev/null und grep /var/log/syslog für Cron-Ausgaben um.
grep cron /var/log/syslog
Sie können Fehler beim Speichern einer Datei sofort anzeigen, nachdem Sie /etc/crontab
oder Dateien innerhalb von /etc/cron.d/
mit bearbeitet haben:
tail -f /var/log/syslog | grep --line-buffered cron
Wenn die Bearbeitung in Ordnung ist, sehen Sie nur den RELOAD
-Hinweis, Fehler werden wie folgt angezeigt
Jul 9 09:39:01 vm cron[1129]: Error: bad day-of-month; while reading /etc/cron.d/new
Sie können Ihr aktives cron mit dem Terminalbefehl sehen:
crontab -l
Hier sind die Parameter der Reihe nach:
min (0 - 59)
Stunde (0 - 23)
Tag des Monats (1 - 31)
Monat (1 - 12)
Tag der Woche (0 - 6) (Sonntag=0)
Befehl
Sie rufen Ihr Skript also jede erste Minute einer jeden Stunde auf. Zu Testzwecken sollten Sie die Ausgabe in kürzeren Abständen testen:
* * * * * <command> #Runs every minute
So wird es jede Minute aufgerufen!