Crontab wird in /etc/cron.d niemals ausgeführt

32

Folgendes habe ich bei Debian Jessie getan:

  • Installieren Sie cron über apt-get install cron
  • lege eine backup_crontabDatei ein/etc/cron.d/

Die Task wird jedoch nie ausgeführt.

Hier sind einige Ausgaben:

/# crontab -l
no crontab for root

/# cd /etc/cron.d && ls
backup_crontab

/etc/cron.d# cat backup_crontab
0,15,30,45 * * * * /backup.sh >/dev/null 2>&1

Gibt es etwas zu tun, um eine bestimmte crontab zu aktivieren, oder um den cron "service" an sich zu aktivieren?

Jivan
quelle
4
Was ist, wenn es ausgeführt wird und ein Fehler auftritt, den Sie nicht sehen können, weil Sie alle Ausgaben nach / dev / null umleiten? :)
Tink
@tink ist es möglich, die Ausgabe stattdessen an das Ende einer Datei anzuhängen?
Jivan
2
sicher ist; 0,15,30,45 * * * * /backup.sh >> / tmp / testing_cron.out 2> & 1
19:36 Uhr tippen
@Jivan, nur eine kleine Anmerkung: ls /etc/cron.dentspricht cd /etc/cron.d && lsin Bezug auf die Ausgabe. Der einzige Unterschied ist, dass sich das Arbeitsverzeichnis nicht ändert.
Drew Chapin

Antworten:

49

In den /etc/cron.dbenötigten Dateien muss auch der Benutzer aufgeführt sein , unter dem der Job ausgeführt werden soll.

dh

0,15,30,45 * * * * root /backup.sh >/dev/null 2>&1

Sie sollten auch sicherstellen, dass die Berechtigungen und der Eigentümer der Gruppe richtig festgelegt sind ( -rw-r--r--und im Besitz von sind root:root).

Stephen Harris
quelle
16
crontab -lmeldet cron-Einträge in /var/spool/cron/crontabs/- dh die pro Benutzer crontabs. /etc/cron.dDateien sind System-Crontabs und werden von nicht gemeldet crontab -l.
Stephen Harris
5
Eigentlich habe ich erwähnt, dass es nicht funktioniert, aber ich habe nur festgestellt, dass es nach dem Hinzufügen rootin der Datei ist - habe es nur crontab -lnicht erwähnt, als Sie erklärten, warum - danke für Ihre Hilfe
Jivan
9
es scheint, dass auch der Dateiname eine Rolle spielt. In meinem Fall hatte ich etc/cron.deiner Datei einen Punkt in der Mitte des Namens hinzugefügt und der Auftrag wurde erst ausgeführt, nachdem ich ihn umbenannt hatte
Bild
20
Gleiches Problem hier, Striche "-" im Dateinamen, durch Ändern in Unterstriche "_" wurde das Problem behoben, Jobs wurden sofort ausgeführt.
Rob
1
Ich hatte auch einen Schuss ... was zum ... warum ?! Wie auch immer, danke @Rob
Nikolay Dimitrov
8

Eine andere Sache, die ich beobachtet habe, ist, dass die Datei in /etc/cron.dkeine Erweiterung haben kann. In meinem speziellen Fall hatte ich einen symbolischen Link:

# my-job.crontab
* * * * * root echo "my job is running!" >> /tmp/my-job.log

$: ln -sf /home/me/my-job.crontab /etc/cron.d/
# This did not work -> job would not run

$: ln -sf /home/me/my-job.crontab /etc/cron.d/my-job
# This did work -> job ran fine

Dateinameneinschränkungen sind auf der ausführbaren Manpage dokumentiert: http://manpages.ubuntu.com/manpages/xenial/man8/run-parts.8.html . Sie können die Option --regex verwenden, um das Dateiformat zu überschreiben.

Das Standard-Cron-Verhalten blieb jedoch ohne Erweiterungen, siehe Kommentare unter: https://bugs.launchpad.net/ubuntu/+source/debianutils/+bug/38022

rodrigo-silveira
quelle
Mann, du hast meinen Tag gerettet!
Elboletaire
2
Dies ist unter Ubuntu korrekt (möglicherweise in allen von Debian abgeleiteten Distributionen). Unter Amazon Linux (und möglicherweise in allen von Redhat abgeleiteten Distributionen) können Sie den Dateinamen mit einem Punkt versehen. Vielen Dank, dass Sie Unix.SE.
Law29
Ich habe gerade ein reines Debian überprüft, und Punkte funktionieren dort auch nicht. Bindestriche funktionieren (anders als in einem Kommentar oben angegeben).
Law29
4

Ich denke, Sie vermissen wahrscheinlich nur eine notwendige Leerzeile am Ende Ihrer Cron-Datei. Ich hatte das gleiche Problem, aber nachdem ich alle hier aufgeführten Punkte überprüft hatte (Benutzerberechtigungen, Dateiname, Cron-Version usw.), stellte ich fest, dass ich nach dem letzten Eintrag in meinem keinen Zeilenumbruch hatte /etc/cron.d/own_cronund dass die gesamte Datei ignoriert wurde.

slac1024
quelle
2

Wenn Sie der einzige Benutzer auf diesem Computer sind, möchten Sie möglicherweise nur verwenden crontab -e. Sie werden aufgefordert, einen Editor auszuwählen, wenn Sie den Befehl zum ersten Mal ausführen. Dann können Sie dies hinzufügen:

0,15,30,45 * * * * /backup.sh >/dev/null 2>&1

Wenn Sie zu einem normalen Benutzerkonto wechseln, müssen Sie sudo crontab -edie Skripts konfigurieren, unter denen Sie die Ausführung planen möchten root.

crontab -lZeigt die aktuelle Crontab nur an, wenn Sie sie mit eingerichtet haben crontab -e. Wenn Sie eine Cron-Datei in /etc/cron.d/ haben, wird diese nicht mit angezeigt crontab -l.

Sie müssen auch sicherstellen , dass Ihr Skript ausführbar mit: chmod +x /backup.sh.

clk
quelle
1
danke - in diesem fall ist die crontab im kontext von a gesetzt, Dockerfilealso kann ich das nicht wirklich crontab -e- aber es ist trotzdem eine nützliche information
Jivan
2

Für Cron aus * bian-Distributionen (wie Raspbian) müssen Sie den -lParameter des Cron-Daemons aktivieren . Das ist empfehlenswert, wenn Sie die /etc/default/cronKonfigurationsdatei verwenden und das aktivieren EXTRA_OPTS.

Touchwood
quelle
Dies wurde abgelehnt, ist aber in einigen Fällen richtig, wenn auch nicht erklärt. In Debian-basierten Distributionen autorisiert die -lOption für den Cron-Daemon einen erweiterten Satz von Dateinamen im /etc/cron.dVerzeichnis. Wenn die Datei also unbemerkt ignoriert wird, weil sie einen Punkt enthält, können Sie entweder "-l" hinzufügen oder "dot entfernen". wird das Problem beheben.
Law29
1

Überprüfen Sie Ihre Version von cron.

Es scheint, dass Sie den Benutzer in einem /etc/cron.dEintrag nicht benötigen, wenn Sie Dillons crond verwenden .

Ich habe das herausgefunden, nachdem ich fast meine restlichen Haare herausgezogen hatte.

Ich habe eine Handvoll Einträge, die /etc/cron.dvon verschiedenen Installationen eingespielt wurden. Nach einigen Nachforschungen stellte ich fest, dass einer von ihnen arbeitete. Es hatte den Benutzer nicht. Also habe ich den Benutzer aus den anderen herausgenommen. Und sie fingen an zu arbeiten.

James Nelson
quelle