it-swarm.com.de

cron jobs - Unterschied zwischen Bearbeitung von "/ etc / crontab" und "crontab -e"

Versucht, einen täglichen cron Job zum Herunterfahren eines Servers einzurichten.

Eine Quelle schlägt vor, /etc/crontab

Ein anderer schlägt vor, crontab -e (mit Sudo)

Ich habe letzteres versucht und mein Prozess lief nicht (wenn ich mich recht entsinne, war es 30 23 * * * shutdown -h)

Ich stelle auch fest, dass es im Nano-Editor an einem .tmp Datei? (oben auf Nano sagt: /tmp/crontab.9zeTNt/crontab)

Was ist los? Wie kann ich das beheben?

1
ABC123

crontab -e:

Nutzbar auf Benutzerbasis; öffnet die Tabelle cron für den aufrufenden Benutzer zur Bearbeitung (eine temporäre Datei in /tmp/, z. B. /tmp/crontab.<RANDOM>/crontab, wie Sie gesehen haben) und nach dem Speichern des Inhalts werden die Überprüfungen durchgeführt. Bei erfolgreicher Übergabe wird die Datei in das Spool-Verzeichnis /var/spool/cron/crontabs/ Verschoben, d. H. In das Spool-Verzeichnis cron, und mit demselben Dateinamen wie der Name des aufrufenden Benutzers gespeichert. Während die Tabelle cron für den aufrufenden Benutzernamen gespeichert wird (z. B. /var/spool/cron/crontabs/foobar, Vorausgesetzt Benutzername foobar); Da alle cron Jobs als dieser Benutzer ausgeführt werden, wird kein Feld für den Benutzernamen benötigt. Jeder Eintrag hier benötigt 6 Felder (Sie wissen, dass diese bereits vorhanden sind, nehme ich an).

/etc/crontab:

Dies ist die Systemtabelle cron (crontab). Es gibt keine Vorstellung, dass Benutzer hier aufgerufen werden, da nur der Superuser diese Datei bearbeiten kann. Benötigt diese Datei 7 Felder mit einem zusätzlichen Feld für den Benutzernamen unter durch Leerzeichen/Tabulator getrenntes 6. Feld. Dies gilt auch für alle cron - Dateien in /etc/cron.d/. Ein weiterer Unterschied zu crontab -e Besteht darin, dass Sie die Datei als Argument für einen Editor oder ein beliebiges Programm/eine Shell öffnen müssen, das/die E/A ausführen kann, wohingegen bei crontab -e Die Datei mit dem Editor geöffnet wäre Erwähnt als VISUAL oder EDITOR oder /usr/bin/editor - der erste gewinnt.


Warum Ihr Befehl in cron fehlgeschlagen ist:

Weil shutdown nur als Superuser oder fähige Benutzer ausgeführt werden kann und der aufrufende Benutzer vermutlich nicht in diese Kategorie fällt. Sie können die in root 's crontab durch Sudo crontab -e Oder setzen Sie es /etc/crontab, Ich bevorzuge normalerweise immer einzelne Benutzertabellen.

Anmerkungen:

Auch cron verwendet standardmäßig eine minimale PATH, und auch Shell ist als sh festgelegt (dash in Ubuntu); Diese beiden sind häufige cron Fallstricke.

Überprüfen Sie beim Debuggen immer syslog und leiten Sie STDOUT und STDERR des entsprechenden Befehls in eine Datei um, um sie später zu analysieren.

1
heemayl

Wenn Sie /etc/crontab Bearbeiten, bearbeiten Sie eine globale crontab

Wenn Sie über crontab -e Bearbeiten, bearbeiten Sie Ihren lokalen, persönlichen Code. Der Editor wird in einer temporären Datei gestartet, sodass die Datei überprüft werden kann, bevor sie an ihren tatsächlichen Speicherort geschrieben wird.

Wenn Sie den Editor bearbeitet, gespeichert und beendet haben (Sie müssen den Vorgang beenden, damit die Dateiüberprüfung und das Kopieren stattfinden), müssen Sie bestätigen, dass Sie eine Meldung erhalten haben, dass "new crontab installiert wurde".

0
taifwa