Wie kann ich feststellen, ob mein stündlicher Cron-Job ausgeführt wurde?

26

Ich habe eine Datei mit dem Namen " ntpdateIn" erstellt/etc/cron.hourly

#!/bin/sh
/usr/sbin/ntpdate-debian
date > /tmp/william_tmp
date > /william_tmp
date > ~/william_tmp
echo test

Ich habe auch Chmod 755 zu dieser Datei gemacht.

Ich kann jedoch nicht sagen, ob die Datei ausgeführt wurde oder nicht!

Die Datei wird in keinem der 3 Verzeichnisse erstellt.

Wenn ich manuell starte, werden cd / && run-parts --report /etc/cron.hourlydie Dateien erstellt und ich bekomme das Echo.

Kann jemand (im Idealfall Schritt für Schritt!) Anweisungen empfehlen, um zu testen, ob es funktioniert?

Wilhil
quelle

Antworten:

25

Eine große Gefahr für cron besteht darin, dass cron in einer extrem eingeschränkten Shell-Umgebung ausgeführt wird. Daher werden viele Variablen nicht in die Umgebung exportiert, hauptsächlich $ PATH. Stellen Sie sicher , dass alle absoluten Pfade zu ausführbaren verwenden, einschließlich der gemeinsamen Funktionen wie echo, uptime, dateusw. alle brauchen vollständige Pfade zu verwenden ( /bin/echo, /bin/date, /usr/bin/uptime). Um den Pfad zu einer ausführbaren Datei zu bestimmen, können Sie den whichBefehl folgendermaßen verwenden: which echo- Dadurch wird der vollständige Pfad zu diesem Tool angezeigt.

Marco Ceppi
quelle
Wie im Chat besprochen, vielen Dank dafür und ich hoffe wirklich, dass es jemand anderem hilft. Ich glaube nicht, dass ich den vollständigen Pfad brauchen würde ... viel mehr über Linux zu lernen und es macht vollkommen Sinn!
Wilhil
36

Sie sollten in Ihrer /var/log/syslogProtokolldatei suchen . Wenn ein Cron gelaufen ist, hätte er eine Zeile wie:

Jun 11 19:09:01 penguin CRON[17376]: (root) CMD (  [ -x /usr/lib/php5/maxlifetime ] && [ -d /var/lib/php5 ] && find /var/lib/php5/ -depth -mindepth 1 -maxdepth 1 -type f -cmin +$(/usr/lib/php5/maxlifetime) ! -execdir fuser -s {} 2>/dev/null \; -delete)
Jun 11 19:17:01 penguin CRON[17799]: (root) CMD (   cd / && run-parts --report /etc/cron.hourly)

Tipps zur Fehlerbehebung finden Sie unter https://help.ubuntu.com/community/CronHowto#Troublesh_and_Common_Problems

Lekensteyn
quelle
Es gibt nichts in Syslog und ich kann keinen Grund sehen, warum es mit diesem Link fehlschlagen würde :(
wilhil
1
Wenn syslog ( grep -i cron /var/log/syslog /var/log/syslog.1) keine Einträge enthält , prüfen Sie, ob der Cron-Daemon ausgeführt wird: ps uww -C cronsollte eine Zeile mit einem Prozess enthalten.
Lekensteyn
Tut mir leid, dass ich irreführend bin, es gibt Entires für Cron im Syslog, nur nichts in Bezug auf diesen Befehl ... Ich weiß, dass einige Jobs stündlich ausgeführt werden, ich bekomme eine neue E-Mail-Benachrichtigung ... AFAIK, diejenigen, die arbeiten, sind von crontab gibt es nichts in cron.hourly das ist, was ich versuche zum arbeiten zu bringen
wilhil
2

Ändern Sie die erste Zeile Ihres Skripts (den Interpreter) in:

#!/bin/bash

Ich hatte in der Vergangenheit auch Probleme mit Umgebungsvariablen und PATH-Problemen. Nach dem Wechsel des Dolmetschers waren bashmeine Probleme weg.

Awi
quelle
1

Dazu habe ich das clearme.shSkript in hinzugefügt/etc/cron.hourly/

Filtern Sie einfach CRON-Aufgaben im Terminal mit dem leistungsstarken egrep und awk :

$ cat /var/log/syslog | egrep clearme | awk "{ print $1 }" > ~/Desktop/cronlog.txt

Die Ausgabe sieht folgendermaßen aus:

Jan 14 15:20:01 markets-dev CRON[10089]: (dminca) CMD (root /etc/cron.hourly/clearme.sh)
Jan 14 15:40:01 markets-dev CRON[18042]: (dminca) CMD (root /etc/cron.hourly/clearme.sh)
Jan 14 16:00:01 markets-dev CRON[22817]: (dminca) CMD (root /etc/cron.hourly/clearme.sh)
Jan 14 16:20:01 markets-dev CRON[28183]: (dminca) CMD (root /etc/cron.hourly/clearme.sh)
Jan 14 16:40:01 markets-dev CRON[411]: (dminca) CMD (root /etc/cron.hourly/clearme.sh)
Jan 14 17:00:01 markets-dev CRON[5442]: (dminca) CMD (root /etc/cron.hourly/clearme.sh)
Jan 14 17:20:01 markets-dev CRON[11935]: (dminca) CMD (root /etc/cron.hourly/clearme.sh)

So erklären Sie alles Schritt für Schritt:

  1. cat / var / log / syslog - Gibt das Systemprotokoll aus
  2. egrep clearme - Wählen Sie jedoch nur Zeilen aus, die den Text clearme enthalten
  3. awk "{print $ 1}" - druckt mir die Zeile, die den Text clearme enthält
  4. > ~ / Desktop / cronlog.txt - gibt die Ergebnisse in der Datei cronlog.txt aus, die sich im Desktop- Verzeichnis befindet.

Der 4. Schritt ist optional. Es werden nur die Ergebnisse im Terminal anstelle der Datei gedruckt.

Daniel Andrei Mincă
quelle