it-swarm.com.de

Überprüfen Sie, ob Crontab funktioniert

Ich möchte überprüfen, ob eine bestimmte Crontab ordnungsgemäß 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 umleitung, 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
79
resizemyimg.com

Die Syntax für den crontab-Eintrag sieht korrekt aus. Wenn Sie Ihre crontab mit "crontab -e" bearbeiten (wie Sie sollten), erhalten Sie in der Tat eine Fehlermeldung, wenn Sie einen syntaktisch ungültigen crontab-Eintrag angeben.

  1. Erstens, läuft /path_to_my_php_script/info.php korrekt von der Kommandozeile aus?

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

    /bin/sh -c "(export PATH=/usr/bin:/bin; /path_to_my_php_script/info.php </dev/null)"
    
  3. Wenn das funktioniert, funktioniert es dann 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 dem Ausführen Ihres Programms durch cron (wie in "man 5 cron" dokumentiert).

Das wahrscheinlichste Problem ist, dass der PATH-Cron, mit dem Sie Ihr Programm ausführen, zu restriktiv ist. Aus diesem Grund möchten Sie am Anfang Ihres crontab-Eintrags möglicherweise Folgendes hinzufügen (Sie müssen in die Verzeichnisse, die Ihr Skript benötigt, Folgendes einfügen):

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 auch am Anfang Ihrer crontab-Datei hinzu:

Shell=/bin/bash

Beachten Sie, dass sich beide Änderungen auf alle die crontab-Einträge auswirken. Wenn Sie diese Werte nur für Ihr info.php -Programm ändern möchten, können Sie Folgendes tun:

*/2 * * * * /bin/bash -c ". ~/.bashrc; /path_to_my_php_script/info.php"

Erwähnenswert ist auch, dass auf einem für "Mail" konfigurierten System (dh einem System mit einem konfigurierten MTA [sendmail/postfix/etc]) alle Ausgaben von Crontab-Programmen automatisch per E-Mail an Sie gesendet werden. Auf einem Ubuntu-Standarddesktopsystem ist keine lokale Mail konfiguriert. Wenn Sie jedoch auf einem Server arbeiten, können Sie "mail" in ein Terminal eingeben, um alle diese Cron-Mails anzuzeigen. Dies gilt auch für den Befehl "at".

69
jamesodhunt

Obwohl sehr selten, funktioniert cron manchmal nicht mehr richtig, obwohl der Dienst ausgeführt wird. So stellen Sie sicher, dass crond ausgeführt wird, und beenden/starten Sie den Dienst.

Unter Linux:

service crond status
service crond stop
service crond start

Auf Ubuntu:

service cron status
service cron stop
service cron start
44
user53817

Leiten Sie die Fehlerausgabe für die Cron-Ausgabe nicht nach/dev/null und grep/var/log/syslog um.

grep cron /var/log/syslog

Sie können sofort Fehler anzeigen, wenn Sie eine Datei nach der Bearbeitung von /etc/crontab oder Dateien in /etc/cron.d/ speichern:

tail -f /var/log/syslog | grep --line-buffered cron

Wenn die Bearbeitung in Ordnung ist, wird nur der Hinweis RELOAD angezeigt

Jul 9 09:39:01 vm cron[1129]: Error: bad day-of-month; while reading /etc/cron.d/new 
31
rubiojr

Sie können Ihren aktiven Cron mit dem Terminal-Befehl sehen:

crontab -l

Hier sind die Parameter in der Reihenfolge:

  1. min (0 - 59)

  2. stunde (0 - 23)

  3. tag des Monats (1 - 31)

  4. monat (1 - 12)

  5. wochentag (0 - 6) (Sonntag = 0)

  6. befehl

Sie rufen Ihr Skript also jede erste Minute jeder Stunde auf. Sie sollten Ihre Ausgabe zu Testzwecken in regelmäßigen Abständen testen:

* * * * * <command> #Runs every minute

Dies wird es jede Minute aufrufen!

18
bioShark

Für den Zeitteil in jeder Zeile können Sie dieses Cron-Tester verwenden, um Ihre Cron-Zeitdefinition zu testen/zu verifizieren.

10
Ashish Karpe

Ich glaube, Sie können run-parts auch verwenden, um Cron-Jobs außerhalb der Band auszuführen. Es ist tatsächlich das, was cron selbst verwendet, um die periodischen Cron-Jobs auszuführen. Wenn Sie also die entsprechenden Argumente angeben, können Sie sie jederzeit ausführen.

Wenn Sie nur eine Datei anstelle aller in z. B. /etc/cron.daily definierten Cron-Jobs ausführen möchten, müssen Sie das reguläre Ausdrucksargument zusammen mit einem gültigen regulären Ausdruck angeben. run-parts --list --regex '^p.*d$' /etc

Denken Sie daran, dass Cron-Jobs in der Regel ohne Erweiterung benannt und als ausführbar gekennzeichnet werden. Stellen Sie daher sicher, dass Ihre Skripte ähnlich sind. Mit einem regulären Ausdruck können Sie jedoch ein Skript mit einer Erweiterung auslösen.

2
dragon788

ah !!

ich habe die Antwort selbst erhalten, habe sie überprüft und habe crond nicht im Standardinstallationsverzeichnis gefunden, d. h. /etc/init.d/

werde jetzt versuchen zu antworten.

note - Ich habe auch den cron.allow, cron.deny überprüft. Bisher ist alles in Ordnung.

1
luckbychance