Überprüfen Sie, ob Crontab funktioniert


82

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

leider haben alle oben versucht aber bei mir nicht funktioniert. Wie Sie sagen, zeigt die Meldung / bin / sh -c "(export PATH = / bin; /tmp/trial.sh </ dev / null)" unten an und ist sich nicht sicher, was es ist / bin / sh: PATH = / bin : ist keine

Antworten:


73

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

  1. Erstens, läuft /path_to_my_php_script/info.phpes 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/shnicht bash verwendet. Wenn Sie bash benötigen, fügen Sie dies auch am Anfang Ihrer crontab-Datei hinzu:

SHELL=/bin/bash

Beachten Sie, dass sich diese beiden Änderungen auf alle crontab-Einträge auswirken . Wenn Sie diese Werte nur für Ihr info.phpProgramm ä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 atBefehl " ".


2
Ich bekomme die Erlaubnis für den 2. Schritt verweigert. Was soll ich machen?
Akikara

@akikara chmod + x ./cron.sh - Ersetzen Sie ./cron.sh offensichtlich durch den Speicherort Ihrer Datei, die Sie ausführen möchten
Tisch

46

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 und anderen Debian-basierten Systemen:

service cron status
service cron stop
service cron start

13
Nur eine Anmerkung ... für Ubuntu ist es cronnichtcrond
Amit Kohli

32

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 /etc/crontabspeichern oder Dateien darin /etc/cron.d/mit:

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

Wenn die Bearbeitung in Ordnung ist, werden Sie nur den RELOADHinweis sehen, wie Fehler auftreten

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

18

Sie können Ihren aktiven Cron mit dem Befehl terminal 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!


* / 2 * * * * Ich habe jetzt alle zwei Minuten geändert
croppio.com


2

Ich glaube, Sie können auch run-partsCronjobs außerhalb der Band ausfü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 definierten Cron-Jobs ausführen möchten, müssen /etc/cron.dailySie 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.


1

ah !!

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

werde jetzt versuchen zu antworten.

hinweis - ich habe das cron.allowauch cron.denynachgesehen. Bisher ist alles in Ordnung.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.