Crontab - Wenn Sie derzeit eine serverlastige Website haben, möchten Sie möglicherweise bestimmte Prozesse wie das Anreichern von Daten oder das Generieren von Miniaturansichten im Hintergrund ausführen, ohne die Benutzeroberfläche zu beeinträchtigen. Nun, Linux crontab hat ein gutes Programm, das genau das tut: Cron.

Eine Einführung in Cron

Was ist das für ein Programm? Cron wird als Daemon kategorisiert, der geplante Befehle ausführen kann. Es wird automatisch gestartet, wenn Sie mehrere Benutzerebenen über /etc/init.d eingeben. Es durchsucht den Spool-Bereich unter / var / spool / cron / crontabs nach Crontab-Dateien, die nach den Konten in / etc / passwd benannt sind. Um auf die Crontabs in diesem Verzeichnis zuzugreifen, müssen Sie den Befehl crontab verwenden, anstatt direkt darauf zuzugreifen. Cron kann auch das etwas andere Format von / etc / crontab sowie Dateien in /etc/cron.d lesen.

Einmal konfiguriert, wacht Cron jede Minute auf, untersucht gespeicherte Linux-Crontabs und prüft den Befehl, um festzustellen, ob etwas ausgeführt werden muss. Wenn ein Befehl ausgeführt und eine Ausgabe generiert wird, wird die Ausgabe an den Eigentümer der crontab oder den Benutzer in der Variablen MAILTO in der crontab gesendet. Die untergeordneten Kopien des Cron, der diese Prozesse ausführt, werden in Großbuchstaben angegeben. Dies wird in der Ausgabe von ps und syslog angezeigt.

Cron überprüft außerdem jede Minute, ob Änderungen in der Mod-Zeit des Spool-Verzeichnisses vorliegen. Wenn es Änderungen gibt, überprüft es die Mod-Zeit aller Linux-Crontabs und lädt die geänderten neu. Daher muss cron nicht neu gestartet werden, wenn eine crontab-Datei geändert wird.

Wenn die Uhr um drei Stunden oder weniger geändert wird, gelten besondere Überlegungen wie zu Beginn und am Ende der Sommerzeit. Wenn die Zeit vorverlegt wird, werden die Jobs, die in der übersprungenen Zeit ausgeführt wurden, so geändert, dass sie kurz nach der Änderung ausgeführt werden. Wenn sich die Zeit rückwärts bewegt, werden die Jobs, die in der wiederholten Zeit liegen, nicht erneut ausgeführt.

Es sind nur Jobs betroffen, die zu einer bestimmten Zeit ausgeführt werden und keine stündlichen Jobs oder Jobs, die im Minuten- / Stundenspezifizierer mit einem '*' gekennzeichnet sind. Jobs, die mit Wild Cars angegeben wurden, werden sofort basierend auf der neuen Zeit ausgeführt. Bei einer Uhrzeitumstellung von mehr als drei Stunden wird sofort die neue Uhrzeit verwendet.

In Red Hat und Debian behandelt cron die cron.d-Dateien als Erweiterungen der Linux-crontab-Datei, da sie dem speziellen Format der Datei folgen, was bedeutet, dass sie das Benutzerfeld enthalten. Diese Funktion zielt darauf ab, Pakete zu ermöglichen, die eine genauere Zeitplanung erfordern als tägliche, monatliche oder wöchentliche Verzeichnisse. Solche Dateien sollten idealerweise nach ihren Lieferantenpaketen benannt werden. Dateien müssen der für Laufteile verwendeten Namenskonvention entsprechen, da sie ausschließlich aus Groß- und Kleinbuchstaben, Ziffern, Bindestrichen und Unterstrichen bestehen müssen. Die Dateien im Verzeichnis cron.d werden genau wie das Linux-Verzeichnis crontab auf Änderungen überwacht. Verwenden Sie für Befehle wie / bin / ls unbedingt absolute Pfadnamen, um den richtigen Befehl aufzurufen.

Eine Einführung in Linux Crontab

Nachdem Sie nun die Vor- und Nachteile von cron kennen, schauen wir uns Linux Crontab genauer an. Dabei handelt es sich um ein Programm zum Installieren, Deinstallieren oder Auflisten der Tabellen, mit denen der Dämon selbst betrieben werden kann. Jeder Benutzer kann eine eigene Linux-Crontab haben, und die Dateien sind im Crontabs-Verzeichnis verfügbar, jedoch nicht für die direkte Bearbeitung vorgesehen.

Jeder Befehl, der in einer Linux-Crontab eines Benutzers eingegeben wird, wird als der Benutzer ausgeführt, dem er gehört. Tabulatoren, führende Leerzeichen und Leerzeilen werden normalerweise ignoriert. Zeilen mit einem Hash-Zeichen als erstem Nicht-Leerzeichen werden ignoriert, da sie als Kommentare behandelt werden. Es ist zu beachten, dass Kommentare in denselben Zeilen von Cron-Befehlen nicht zulässig sind, wie sie als Teil des Befehls gelesen werden. In ähnlicher Weise sind Kommentare auch in Zeilen mit Umgebungsvariableneinstellungen nicht zulässig.

In einer Linux-Crontab kann es sich bei einer aktiven Zeile um einen Cron-Befehl oder eine Umgebungsvariable in der Form "Name = Wert" handeln, in der bei Bedarf Leerzeichen um das Gleichheitszeichen hinzugefügt werden können. Alle nachfolgenden nicht führenden Leerzeichen sind Teil des Namenswerts. Die Wertzeichenfolge kann in einfache oder doppelte passende Anführungszeichen gesetzt werden, um nachfolgende oder führende Leerzeichen beizubehalten. Es wird nicht für Umweltsubstitutionen analysiert, daher kann es vorkommen, dass Zeilen wie "PATH = $ HOME / bin: $ PATH" nicht wie erwartet funktionieren.

Viele Umgebungseinstellungen werden automatisch von cron eingerichtet, z. B. HOME und LOGNAME in der passwd-Zeile des Benutzers und SHELL in / bin / sh und PATH in / usr / bin: / bin. Sie können PATH, SHELL und HOME durch die Crontab-Einstellungen überschreiben. LOGNAME kann jedoch nicht geändert werden, da es der Benutzer ist, von dem aus der Job ausgeführt wird. Auf BSD-Systemen kann diese Variable USER heißen. In diesem Fall wird auch USER gesetzt.

Wenn das Versenden von E-Mails zu den Befehlen gehört, die in der Linux-Crontab ausgeführt werden, betrachtet cron auch MAILTO. Wenn die Variable definiert und nicht leer ist, wird eine E-Mail an den angegebenen Benutzer gesendet. Ist es jedoch leer, wird keine E-Mail gesendet und stattdessen eine E-Mail an den Eigentümer von Linux Crontab gesendet. Wenn die Datei cron.allow verfügbar ist, müssen Sie darin aufgeführt sein, um diesen Befehl verwenden zu können. Wenn diese Datei nicht vorhanden ist, aber eine cron.deny-Datei vorhanden ist, sollten Sie aus dieser Datei entfernt werden, um den Befehl zu verwenden. Wenn keine der beiden Dateien vorhanden ist, kann nur der Superuser den Befehl abhängig von den standortabhängigen Parametern verwenden. Alternativ können alle Benutzer den Befehl verwenden, was bei Standard-Debian-Systemen der Fall ist.

Wenn die Option –u verfügbar ist, wird der Benutzername angegeben, dessen Linux-Crontab angepasst werden muss. Wenn nicht angegeben, überprüft crontab die crontab des Benutzers, der den Befehl ausführt. Es ist wichtig, diese Option immer aus Sicherheitsgründen zu verwenden, wenn Sie in su laufen, da Linux Crontab von su verwechselt werden kann. Die Option -l ist verfügbar, damit die aktuelle Crontab auf der Standardausgabe angezeigt wird, während die Option -r die aktuelle Crontab entfernt. Der Befehl -e dient zum Bearbeiten der aktuellen Linux-Crontab mit Hilfe von Editoren, die in den Umgebungsvariablen EDITOR oder VISUAL angegeben sind. Sie können keinen Editor verwenden, der die Verknüpfung der Datei aufhebt und sie neu erstellt. Sie benötigen einen Editor, der die Datei bearbeitet. Nach dem Verlassen des Editors wird die angepasste Linux-Crontab automatisch installiert.

Das Modul pam_env wird auch von cron auf dem Debian GNU / Linux-System unterstützt und lädt die Umgebung wie in der Moduldatei angegeben. Es ist jedoch zu beachten, dass die PAM-Einstellung die oben genannten Einstellungen oder die Einstellungen der Crontab-Datei nicht überschreibt. Wenn Sie einen anderen PATH als den Bin-Speicherort möchten, müssen Sie ihn in der crontab-Datei einrichten. Standardmäßig sendet Cron E-Mails unter Verwendung des Inhaltstyps 'text / plain', wobei der Zeichensatzparameter auf den Codesatz / die Zeichentabelle des Gebietsschemas gesetzt wird, in dem der Cron gestartet wurde. Dies ist das Standardgebietsschema des Systems ohne Umgebungsvariablensatz oder das Gebietsschema, das die Variablen eingerichtet haben. Sie können Ihre eigenen Zeichenkodierungen für die Mail-Ausgabe hinzufügen, indem Sie die Variablen 'Content_Transfer_Encoding' und 'Content_Type' in den crontabs so einstellen, dass sie mit den Mail-Headern der Namen übereinstimmen.

Empfohlene Kurse

  • Online R Studio Anova Technikkurs
  • Zertifizierungstraining in AngularJS
  • ISTQB Level 1 Zertifizierungskurs
  • Zertifizierungstraining in Software Testing Fundamentals

Arbeiten an Crontab

Auf den Befehl crontab, der in Unix-ähnlichen und Unix-Betriebssystemen zu finden ist, kann über ein Terminal zugegriffen werden. Um zu sehen, welche crontab gerade ausgeführt wird, öffnen Sie ein Terminal auf Ihrem System und führen Sie den folgenden Befehl aus:

$ sudo crontab -l

Mit dem folgenden Befehl können Sie die Crontab-Joblisten bearbeiten:

$ sudo crontab -e

Dieser Befehl öffnet den Standardeditor in Ihrem System, der Pico oder Vio sein kann, um die Crontab zu ändern. Speichern und beenden Sie den Editor, um den Crontab-Job in Ihrer Crontab-Datei zu speichern. Crontab-Jobs oder -Cronjobs können folgendermaßen geschrieben werden:

* * * * * /bin/execute/this/script.sh

Der obige Befehl enthält fünf Sternchen, von denen jedes unterschiedliche Datumsteile darstellt, um den Job zu planen. Hier sind sie:

  1. Minute von Null bis 59
  2. Stunde von null bis 23
  3. Tag des Monats von eins bis 31
  4. Monat von eins bis 12
  5. Wochentag von null bis sechs, wobei null Sonntag bedeutet

Die obige Liste wurde in der angegebenen Reihenfolge erstellt, daher müssen Sie zuerst die Minute definieren, gefolgt von Stunde, Tag des Monats, Monat und Wochentag. Sie können das Sternchen beibehalten, wenn Sie keines der Felder definieren möchten. Beachten Sie jedoch, dass das Symbol "alle" bedeutet. Wenn Sie alle fünf Felder undefiniert lassen und die Sternchen intakt lassen, bedeutet dies jede Minute zu jeder Stunde, an jedem Tag in jeder Woche und in jedem Monat.

Nehmen wir an, Sie möchten nur jeden Sonntagmittag ein Skript ausführen.

0 12 * * 0 /bin/execute/this/script.sh

Jetzt wird das Skript ausgeführt, wenn die Systemuhr jeden Sonntag, jede Woche im Monat 1200 Stunden erreicht. Wenn Sie das Skript nun jeden Werktag um 12 Uhr ausführen möchten, schreiben Sie Folgendes:

0 12 * * 1-5 /bin/execute/this/script.sh

Der cron führt Befehle aus, wenn die Felder Jahr, Monat, Stunde und Minute mit der aktuellen Zeit übereinstimmen oder wenn mindestens der Tag von Monat und Jahr mit der aktuellen Zeit übereinstimmen. Ein Feld kann mit einem Sternchen markiert werden, um "first-last" zu kennzeichnen. Zahlenbereiche sind zulässig, wobei die Bereiche zwei durch einen Bindestrich getrennte Zahlen sind. Der spezifische Bereich ist inklusive, sodass ein Bereich von 8-11 für "Stunden" die Ausführung bei der achten, neunten, zehnten und elften Stunde angibt. Es werden auch Listen unterstützt, bei denen jede Nummer durch Kommas getrennt ist, z. B. '1, 2, 8, 9'. Sie können auch mischen und anpassen, also könnte es "1, 2, 8-11" sein.

Sie können Schrittwerte in Verbindung mit den Bereichen verwenden, wobei das '/' nach einem Bereich ein Überspringen des Werts der Zahl durch den Bereich angibt. Beispielsweise gibt '0-11 / 2' im Stundenfeld die Befehlsausführung jede zweite Stunde an, die als Liste wie folgt geschrieben würde: '0, 2, 4, 6, 8, 10'. Schritte können nach einem Sternchen wie '* / 2' zugelassen werden, um einen Befehl anzuzeigen, der alle zwei Stunden ausgeführt werden soll. Für die Felder Tag und Monat können Sie die ersten drei Buchstaben dieses bestimmten Tages oder Monats verwenden, und die Groß- / Kleinschreibung spielt keine Rolle. Listen und Namensbereiche werden jedoch nicht unterstützt. Der Tag der Ausführung kann in zwei Feldern angegeben werden: Wochentag und Monatstag. Wenn beide Felder eingeschränkt sind, wird der Befehl ausgeführt, wenn eines der Felder übereinstimmt.

Der Rest der Zeile ist das sechste Feld, das den auszuführenden Befehl angibt. Der Befehlsteil der Zeile nimmt bis zu einer neuen Zeile oder bis zu% Zeichen ein. Sie wird vom sh oder von der angegebenen Shell in der SHELL-Variablen der crontab-Datei ausgeführt. Das% im Befehl wird in Zeilenumbruchzeichen geändert, sofern sie nicht mit dem umgekehrten Schrägstrich '\' versehen werden. Alle Daten nach dem ersten% -Zeichen werden als Standardeingabe an den Befehl gesendet. Sie können eine Befehlszeile nicht in mehrere Zeilen aufteilen.

Planungstricks für Crontab

Die Formatierung kann etwas gewöhnungsbedürftig sein, aber hier sind einige Tricks, die Ihnen helfen sollen. Wenn Sie alle zehn Minuten einen Cronjob ausführen möchten, können Sie dies folgendermaßen schreiben:

0, 10, 20, 30, 40, 50 * * * * /bin/execute/this/script.sh

Oder Sie können es so schreiben, was einfacher ist:

* / 10 * * * * /bin/execute/this/script.sh

Sie haben auch spezielle Wörter, die Sie für das Feld für die erste Minute anstelle einer Zahl wie folgt hinzufügen können:

  • @reboot: Dies würde das Skript einmal beim Systemstart ausführen
  • @yearly: den Befehl einmal im Jahr ausführen (das alternative Format wäre "0 0 1 1 *")
  • @annually: eine Alternative zum jährlichen Keyword
  • @monthly: den Befehl einmal im Monat ausführen ("0 0 1 * *")
  • @wöchentlich: einmal pro Woche ausführen ("0 0 * * 0")
  • @daily: einmal pro Woche ausführen ("0 0 * * *")
  • @midnight: eine Alternative zum täglichen Keyword
  • @hourly: jede Stunde laufen ("0 * * * *")

Ausgabespeicher

Standardmäßig speichert der Cron die Ausgabe des Jobs im Benutzerpostfach oder im Stammverzeichnis. Sie können die Ausgabe jedoch einfacher und ansehnlicher gestalten, indem Sie sie in einer separaten Protokolldatei speichern. Das ist wie man es macht:

* / 10 * * * * /bin/execute/this/script.sh >> /var/log/script_output.log 2> & 1

Linux ist in der Lage, auf verschiedenen Ebenen zu berichten. Sie haben Standardfehler STDERR und Standardausgabe STDOUT, die mit 2 bzw. 1 markiert sind. In der folgenden Anweisung wird angegeben, dass sowohl STDERR als auch STDOUT gespeichert werden sollen, um einen einzelnen Datenstrom mit Nachrichten und Fehlern zu erstellen:

2> & 1

Damit wir den Ausgabestream definiert haben, müssen wir ihm jetzt ein Ziel zuweisen. Das '>' überschreibt die Datei und '>>' hängt daran an. Zum Anhängen, was immer sicherer ist, können Sie den folgenden Befehl verwenden:

>> /var/log/script_output.log

Fazit

Wie Sie sehen, können Sie mit cron festlegen, dass Aufgaben im Hintergrund in regelmäßigen Abständen automatisch ausgeführt werden. Dies ermöglicht das automatische Erstellen von Backups, das Planen von Updates, das Synchronisieren von Dateien und vieles mehr. All das und noch viel mehr können Sie mit crontab erledigen.

Empfohlene Artikel:-

In den folgenden Artikeln erfahren Sie mehr über Linux Crontab. Gehen Sie einfach über den Link.

  1. Linux Interview Fragen und Antworten | Nützlich und am meisten gefragt
  2. Karriere in Linux
  3. Top 10 hilfreiche Linux-Apps für Systemadministratoren
  4. Linux gegen Windows 10