Überprüfen, ob crontab funktioniert

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
Lösung

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.

  1. Erstens: Läuft /path_to_my_php_script/info.php auf der Kommandozeile korrekt?

  2. Wenn ja, läuft es dann auch korrekt so?:

     /bin/sh -c "(export PATH=/usr/bin:/bin; /path_to_my_php_script/info.php &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".

Kommentare (2)

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 
Kommentare (0)

Sie können Ihr aktives cron mit dem Terminalbefehl sehen:

crontab -l

Hier sind die Parameter der Reihe nach:

  1. min (0 - 59)

  2. Stunde (0 - 23)

  3. Tag des Monats (1 - 31)

  4. Monat (1 - 12)

  5. Tag der Woche (0 - 6) (Sonntag=0)

  6. 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:

* * * * *  #Runs every minute

So wird es jede Minute aufgerufen!

Kommentare (1)