Frage Cron läuft, aber nichts passiert


Ich habe ein Skript namens "forward_email.sh" erstellt und Berechtigungen auf 777 festgelegt. Es enthält die folgende Zeile:

echo "It worked: $(date)" >> /home/noc/email.log

Ich habe einen Cron-Job mit folgender Zeile erstellt:

*/5 * * * * /home/noc/forward_email.sh

Das Problem ist, dass die Datei "email.log" niemals geändert wird. Ich setze sogar die Berechtigungen auf 666. Wenn ich das Skript manuell ausführe, funktioniert es perfekt.

Der Cron-Job läuft gemäß der Datei "/var/log/cron.log".

Kann mir jemand in die richtige Richtung weisen, was schief gehen könnte? Dies ist eine minimale Installation der virtuellen Maschine von Ubuntu Server 9.04 mit Cron installiert über apt-get.

AKTUALISIEREN: Ich habe einen sehr dummen Fehler gemacht. Ich nannte mein Skript "forward_mail.sh". Ich war nicht, bis ich einige E-Mail-Dienste installiert habe und die folgende Fehler-E-Mail von Cron bekommen habe, dass ich meinen Fehler entdecke.


4
2017-08-04 03:49


Ursprung


ist das nicht mehr wie .. serverfault Frage? - codingbear
Benutzer verwenden Cron. - Richard Hoskins
Können Sie die Ausgabe von crontab -l bereitstellen? - John T
crontab -l gibt dieselbe Zeile in der ursprünglichen Frage aus. - Joseph
Gibt es /etc/cron.allow? - Richard Hoskins


Antworten:


Viele mögliche Dinge von meinem Kopf.

Sind Sie sicher, dass der Eintrag crontab wirklich auf Ihr Skript zeigt? Zum Beispiel, wenn Sie ein Skript wie ~ noc / bin / script.sh, aber habe einen Eintrag wie / home / noc / bin / Skript (dh ein subtiler Tippfehler), dann wird es natürlich nicht funktionieren. Normalerweise überprüfe ich meine Crontab-Einträge, indem ich den Befehl aus crontab mit meiner Maus kopiere und ihn dann in eine Eingabeaufforderung einfüge, nur um zu 100% sicher zu sein, dass er ausführen wird, was ich will.

Enthält Ihr Skript? nur die angegebene Linie? In der Regel müssen Sie Folgendes hinzufügen:

#!/bin/bash

... ganz oben in Ihrem Skript, damit es funktioniert.

Wenn es komplizierter ist als die Einzellinie, sind Sie sicher die Programmierlogik wird es erlauben, diese bestimmte Linie zu führen?

Versuchen Sie, Ihr Skript zu reduzieren

#!/bin/bash
echo "Bing!" >> /tmp/cronjob

... um zu sehen, was passiert. Wenn das funktioniert, hast du ein Programmierproblem in deinem Cron-Skript. Wenn es fehlschlägt, hast du ein Cron-Problem.

Ist der Benutzer "noc" derjenige, der das Skript ausführt? Wenn nicht, sind Sie sicher, dass der Benutzer, der das Cron-Skript ausführt, Lese- / Schreibzugriff über / home / noc auf die Datei email.log hat?

Wohin geht die Fehler-E-Mail des Benutzers, der den Cronjob ausführt? Wird eine Fehler-E-Mail generiert, die dann an eine Stelle gesendet wird, die Sie nicht erwarten, oder die Sie vielleicht komplett vergessen haben? Probieren Sie einen Cronjob von

#!/bin/bash
echo "Bing!"

... und dann versuchen herauszufinden, wo die E-Mail generiert wird.

Sind cron.deny und / oder cron.allow im Spiel? Wenn /etc/cron.allow existiert, dann muss der Benutzer noc darin aufgeführt sein; wenn /etc/cron.deny existiert. das Benutzer-Noc muss nicht darin aufgeführt sein. Wenn auf RedHat weder cron.allow noch cron.deny vorhanden sind, darf NUR der root-Benutzer cron verwenden.


6
2017-08-04 04:14



Ich habe mein Skript reduziert und es passiert immer noch nichts. Der noc-Benutzer sollte der einzige Benutzer sein, der das Skript ausführt, da es das einzige Konto ist. Ich habe keine E-Mail-Dienste auf diesem Server installiert. - Joseph
Erm ... benutzt Ubunto cron.allow und cron.deny? - David Mackintosh
OK, habe dein Update gesehen, froh, dass du es herausgefunden hast. - David Mackintosh


Cron läuft mit eingeschränkten Umgebungsvariablen, insbesondere Ihren $PATH. Versuchen Sie, den vollständigen Pfad zu allen Binärdateien zu setzen. Damit /home/noc/forward_email.sh sollte sein:

/bin/echo "It worked: $(date)" >> /home/noc/email.log

Auch was macht */5 Machst du am Anfang deines Skripts?  */5 läuft einmal alle fünf Minuten, 5 Läuft jede Stunde 5 Minuten nach der vollen Stunde.

5    *   *   *    * /home/noc/forward_email.sh
#*   *   *   *    *  command to be executed
#-   -   -   -    -
#|   |   |   |    |
#|   |   |   |    +----- day of week (0 - 6) (Sunday=0)
#|   |   |   +------- month (1 - 12)
#|   |   +--------- day of month (1 - 31)
#|   +----------- hour (0 - 23)
#+------------- min (0 - 59)

Zuletzt haben Sie die crontab mit dem folgenden Befehl bearbeitet und gespeichert:

crontab -e

... wo Ihr Editor von der Umgebungsvariablen ausgewählt wird $EDITOR?


5
2017-08-04 04:22



* / 5 fährt alle 5 Minuten. mit nur 5 wird es jede Stunde um 5 Minuten nach der vollen Stunde laufen. - pgs
Das Hinzufügen des vollständigen Pfads hat nichts geändert. Ich habe die Contrab mit "crontab -e" erschaffen. Der Editor ist Nano. - Joseph


echo "It worked: $(date)" >> /home/noc/email.log

Tut /home/noc/email.log vorhanden, bevor Sie das Skript ausführen? Kann der Benutzer den Cron-Job ausführen? Was passiert, wenn du es vorher erstellst? z.B.

touch /home/noc/email.log
chmod 666 /home/noc/email.log

1
2017-08-04 04:43



Nein Ja. Gleiche Sache. - Joseph


Wenn Sie Zweifel an Ihrem Skript haben, fügen Sie die folgende Zeile am Anfang des Skripts ein:

 #!/bin/bash -x

(Wenn Sie diese Schale nicht verwenden, legen Sie einfach die gute)

Starten der Subshell mit dem -x (eXplicit), die das gesamte Skript im Debug-Modus ausführt. Spuren jedes Befehls und seiner Argumente werden nach der Erweiterung der Befehle, aber vor ihrer Ausführung in die Standardausgabe ausgegeben.


0
2017-12-21 18:33