Wie bearbeite ich eine Crontab-Datei richtig?

52

Ich versuche, die Aktualisierung von awstats für meinen Webserver zu automatisieren und verstehe, dass ich cron verwenden muss, um das einzurichten. So hat jeder Benutzer eine Crontab-Datei?

Ich habe die Anweisungen hier Community / AWStats befolgt

Und es heißt, in die Datei zu gehen: /etc/crontab

Diese Datei enthält bereits einige Informationen. Ist das die Hauptdatei crontaboder so? Ich habe einige Anweisungen online gesehen, um die Datei zu verwenden, die mit erscheint crontab -e.

Was ist die richtige Datei und wie geht das am besten?

Wenn ich eine Aufgabe als Benutzer ohne Rootberechtigung einplane, wird sie in dem angegebenen Zeitintervall ohne Probleme von selbst ausgeführt?

Muss ich den Server nach dem Speichern des Cron-Jobs in der crontabDatei neu starten, bevor er funktioniert?

Timbram
quelle

Antworten:

50

Was ist die richtige Datei und wie geht das am besten?

crontab -e ist der beste Weg, dies zu tun. Auf diese Weise können Sie Crontabs für jeden Benutzer einfach bearbeiten.

Wenn ich eine Aufgabe als Benutzer ohne Rootberechtigung einplane, wird sie in dem angegebenen Zeitintervall ohne Probleme von selbst ausgeführt?

Ja, und es wird mit den Berechtigungen dieses Benutzerkontos ausgeführt.

Grundsätzlich ist es am besten, geplante Aufgaben mit den niedrigsten Berechtigungen auszuführen, mit denen Sie davonkommen können. Wenn Sie also keine Root-Berechtigung benötigen, verwenden Sie keine Root-Berechtigung. Wenn Sie nicht einmal auf die Dateien und Ordner Ihres Kontos zugreifen müssen, können Sie einen neuen Benutzer erstellen und dieses Benutzerkonto nur für diese Aufgabe verwenden. Wenn für Ihre Aufgabe jedoch root erforderlich ist, verwenden Sie die crontab von root ( su/ sudo sufür root und dann crontab -e).

Muss ich den Server nach dem Speichern des Cron-Jobs in der Crontab-Datei neu starten, bevor er funktioniert?

Nein, es wird sofort funktionieren (na ja, der nächste geplante Zeitpunkt).

Warum nicht die Datei direkt bearbeiten? Wo befindet es sich?

Die Benutzer-Crontab-Dateien befinden sich in /var/spool/cron/crontabs, aber ihre Berechtigungen sind so festgelegt, dass sie nicht ohne Superuser-Berechtigung durchlaufen werden können (wenn sie jedoch einmal geöffnet sind und der Cron-Prozess die Berechtigungen verliert, kann er weiterhin auf die Datei zugreifen).

Das System ist nicht für Endbenutzer vorgesehen, um diese Dateien direkt zu bearbeiten, und in der Tat weist der obere Teil der Datei eine strenge DO NOT EDIT THIS FILEWarnung auf, die diesbezüglich angezeigt wird. Die Datei ist stattdessen für die Bearbeitung vorgesehen, crontab -ewodurch ein temporärer Spiegel der Datei /tmpzur Bearbeitung eingerichtet wird - ohne die ernste Warnung - und anschließend die permanente crontab-Datei selbst überprüft und installiert wird. Dies kann alles ohne Superuser-Berechtigung erfolgen.

Wenn Sie die Crontab-Datei direkt bearbeitet haben, weiß ich nicht, was das Ergebnis sein würde. Möglicherweise wird es erst beim nächsten Neustart wirksam, und Fehler können nur schwer behoben werden.

thomasrutter
quelle
5
crontab -ekönnen Sie Ihren Benutzer crontab ohne sudo bearbeiten. Die Benutzer-Crontabs befinden sich in /var/spool/cron/crontabseinem Verzeichnis, auf das ohne Superuser-Berechtigung nicht zugegriffen werden kann (jedoch so, dass das Verzeichnis nach dem Löschen von Berechtigungen noch gelesen werden kann). Selbst wenn Sie sudo verwenden, um die Datei direkt zu bearbeiten, wird oben die große Warnung "DIESE DATEI NICHT BEARBEITEN" angezeigt. Die Datei kann mit dem crontabBefehl bearbeitet werden, der eine temporäre Kopie verwendet /tmpund anschließend installiert wird es nach dem Speichern.
Thomasrutter
25

Jeder Benutzer hat seine eigenen crontab.

Um es zu sehen, tippe einfach

crontab -l

und ja du hast es richtig gesehen, wenn du ein hinzufügen willst crontabdann mach einfach

crontab -e

Zum ersten Mal werden Sie nach dem zu verwendenden Editor gefragt crontab. Als Anfänger würde ich die Verwendung von Nano empfehlen, da dies der einfachste zu verwendende Editor ist.

Die Crontab selbst funktioniert so

MIN =  Minute 0-60
HOUR = Hour [24-hour clock] 0-23
MDAY = Day of Month 1-31
MON = Month 1-12 OR jan,feb,mar,apr ...
DOW =  Day of Week 0-6 OR sun,mon,tue,wed,thu,fri,sat
COMMAND = Command to be run Any valid command-line

Also, um zB nur am Montag alle 15 Minuten einen Job auszulösen, machst du es so

*/15 * * * mon /home/me/yourscript.sh

und JA, es ist sehr wichtig, dass Sie Ihren Cronjob in der Crontab des Benutzers ablegen, der über genügend Rechte verfügt, um ihn auszuführen.

Wenn Ihr Skript root oder ein spezieller Benutzer sein muss, stellen Sie sicher, dass Sie diesem Benutzer su zuweisen und dort den Cronjob hinzufügen.

Auch sehr wichtig!

cronjob ist doof! Ja, ich habe es gesagt. Vergewissern application/command/scriptSie sich immer, dass Sie den vollständigen Pfad eingeben, mit dem Sie arbeiten, da Crontab nicht funktioniert .bashrc. Sie müssen immer sicherstellen, dass Sie cron mitteilen, wo sich die Dateien und Verzeichnisse befinden.

Um den Rest Ihrer Fragen zu beantworten:

Natürlich läuft es von alleine, dafür ist es da. Aber Sie müssen überprüfen, ob Cronjob wirklich funktioniert oder ob etwas fehlt. Logge dich zB in eine Logdatei ein, um zu sehen, ob es wirklich funktioniert.

Und NEIN, ein Neustart ist nicht erforderlich. Ein Neustart unter Linux ist normalerweise nur erforderlich, wenn Sie einen neuen Kernel installieren. Damit es funktioniert, müssten Sie neu starten. Fast alles andere ist unter Linux ohne Neustart möglich. Natürlich gibt es Ausnahmen, aber im Allgemeinen ist diese Aussage richtig.

s1mmel
quelle
Um
bitte