GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Crontab in Linux mit Beispielen verstehen

Die crontab wird verwendet, um alle Arten von Aufgaben auf Linux-Systemen zu automatisieren. Dies ist eine besonders wichtige Fähigkeit, die angehende Systemadministratoren erlernen sollten. Es kann etwas schwierig sein, anzufangen, wenn Sie ein Anfänger sind. Die Syntax unterscheidet sich von den meisten anderen Befehlen. Aus diesem Grund enthält diese Lektion ein wenig mehr Hintergrundinformationen, bevor ich Ihnen einige Verwendungen zeige.

Lassen Sie sich von crontab nicht einschüchtern

Crontab war für mich als Neuling eines der einschüchternden Linux-Konzepte. Als mir „crontab“ vorgestellt wurde, benutzte ich die Befehlszeile erst seit ein paar Tagen und hatte kaum Verständnis dafür, wie grundlegende Dateinavigationsbefehle wie „ls“ und „cd“ verwendet werden.

Der Grund, warum ich meine persönliche Lerngeschichte anspreche, ist, dass ich erwarte, dass sich viele neue Linux-Benutzer ähnlich überfordert fühlen, wenn sie sich die einzigartige Syntax von „crontab“ ansehen. Ich kann Sie jedoch beruhigen, es ist nicht so kompliziert, wenn Sie einmal verstanden haben, wie es funktioniert.

Was Sie in diesem Leitfaden lernen werden

Ich möchte eine kurze Einführung in einige der Konzepte von crontab geben, um es leichter verständlich zu machen. Mein Ziel ist es, diese Konzepte zu kontextualisieren und zu veranschaulichen, wie sie sich aufeinander beziehen.

  • Schnelle Einführung in Cron-Konzepte
  • Crontab-Zugriff für Ihr Benutzerkonto einrichten
  • Behandeln Sie Fehler mit Ihren Cronjobs
  • Cronjobs erstellen

Schnelle Einführung in wichtige Cron-Konzepte

Lassen Sie mich Ihnen zunächst einige grundlegende Konzepte rund um „Cron“ vorstellen.

Unterschied zwischen Cron, Crontab und Cron-Job

Dinge visuell zu sehen hilft dabei, neue Themen schneller zu verstehen. Hier ist eine Aufschlüsselung, wie diese drei Themen im Allgemeinen interagieren. Ich werde dann jeden mit mehr Details beschreiben.

Element Linux-Name Bedeutung
Daemon ‘crond’ Ausgesprochen „Dämon“ oder „Tag-Mon“. Dies sind Linux-Hintergrundsystemprozesse.
Tabelle 'crontab' Sie schreiben Zeilen in diese Tabelle, wenn Sie einen crontab-Befehl eingeben. Jedes „*“-Sternchen steht für ein Zeitsegment und eine entsprechende Spalte in jeder Zeile.
Job Cronjob Die spezifische auszuführende Aufgabe, die in einer Reihe beschrieben wird, gepaart mit ihrer festgelegten Zeit-ID

Die Cron-Tabelle

Crontab steht für Crontable. Dies ist eine Linux-Systemdatei, die eine tabellenartige Struktur erstellt, in der Felder durch Leerzeichen getrennt sind. Benutzer können die Tabelle füllen, indem sie jedem Feld Werte zuweisen (Sternchen).

Im gesamten Artikel verwende ich möglicherweise eine andere Sprache, um diese Idee zu beschreiben. Um klar zu sein, ein Feld, eine Zelle, eine Spalte usw. beziehen sich alle auf dasselbe. Wenn es hilft, können Sie sich Ihre Crontab wie eine Mini-Datenbank vorstellen.

Der Cron-Job

Wenn Sie sich mit Datenbanken nicht auskennen, können Sie sich die Zellen in einer leeren Excel-Datei vorstellen. In jedem Fall stellt für diese Analogie jeder Stern eine Spalte dar, deren Bedeutung durch ihre Überschrift definiert wird. Die letzte Spalte ist ein Aufruf für einen Befehl oder ein Skript. Jede vollständige Reihe kann als einzelner Job betrachtet werden. Diese werden oft als „Cron-Jobs“ bezeichnet, obwohl Job, Aufgabe usw. alle austauschbare Begriffe sind.

Der Cron-Daemon

Wir haben bereits die Tabelle besprochen und wie wir sie mit Jobs füllen. Aber wie werden diese Jobs ausgeführt? Ein Systemprozess namens Daemon läuft im Hintergrund unserer Linux-Maschine.

Es gibt Daemons für viele verschiedene Dienste. Diese werden üblicherweise benannt, indem ein „d“ an einen Dienstnamen angehängt wird.

Der Cron-Daemon heißt natürlich „crond“. Unsererseits ist keine Aktion erforderlich, um diesen Daemon auszuführen, aber wenn Sie der Meinung sind, dass der Befehl nicht richtig funktioniert, können Sie den Befehl ps verwenden, um zu überprüfen, ob „crond“ ausgeführt wird.

ps aux | grep crond

Dieser Befehl durchsucht aktuelle Prozesse nach allen Benutzern und gibt alle Instanzen von „crond“ zurück.

[email protected]:~$ ps ux | grep crond
christo+  8942  0.0  0.0  18612   840 pts/0    S+   02:16   0:00 grep --color=auto crond

Ich kann sehen, dass der Daemon für mein Benutzerkonto ausgeführt wird. Ich wusste das schon, weil ich den ganzen Tag eine Datei mit Output gefüllt habe.

Crontab-Syntax verstehen

Nachdem Sie nun ein ungefähres Verständnis dafür haben, wie cron funktioniert, schauen wir uns die Syntax der Verwendung von crontab an. Ich hoffe, es ist weniger verwirrend, wenn Sie sich diese Informationen als Tabelle in Ihrem Kopf vorstellen können.

crontab [options]

* * * * *  <command> 
OR 
* * * * * <path/to/script>

Ich verspreche Ihnen, dass dies von Nutzen sein wird, sobald wir unser eigenes Beispiel zum Laufen gebracht haben. Lassen Sie uns noch einmal die Syntax für die Cron-Jobs durchgehen.

Wie Sie sehen können, hat die Crontab-Syntax 5 Sternchen. Hier ist, was jeder dieser Sternchen darstellt:

1. 2. 3. 4. 5.
* * * * *
ID Minute Stunde Tag-Datum Monat Tagesname
Werte 0-59 0 -23 1-31 1-12 0-6

HINWEIS:Die Tagesnamen 0-6 beginnen mit Sonntag.

Um eine Aufgabe zu planen, ersetzen Sie das entsprechende Sternchen durch Ihren gewünschten Wert.

Lass es uns schnell üben. Wenn Sie crontab wie das untenstehende haben, wann wird der Job Ihrer Meinung nach ausgeführt?

0 0 * * 0 

F:Wann wird der Befehl ausgeführt, wenn Sie den Job auf diese Weise festlegen?

A. Stündlich von Montag bis Samstag
B. Sonntags im Minutentakt
C. Nur um Mitternacht von Montag bis Samstag
D. Sonntags nur um Mitternacht

Die Antwort hier ist D. Führen Sie jeden Sonntag um 00:00 [Mitternacht] „Befehl“ aus.

Crontab-Zugriff für Ihr Benutzerkonto einrichten

Crontab ist benutzerspezifisch. Das hast du schon ein wenig angesprochen. Wenn Sie der Meinung sind, dass Sie crontab bereits verwendet haben, können Sie dies mit crontab -l überprüfen .

[email protected]:~$ crontab -l
no crontab for christopher

[email protected]:~$ crontab -e
no crontab for christopher - using an empty one

Select an editor.  To change later, run 'select-editor'.
  1. /bin/nano        <---- easiest
  2. /usr/bin/code
  3. /bin/ed

Choose 1-3 [1]: 1

Wenn ich diesen Befehl ausführe, können Sie sehen, dass ich auf diesem System kein crontab habe.

Da ich noch kein Crontab erstellt habe, verwende ich -e Um die Tabelle zu bearbeiten, werde ich nach meinem bevorzugten Texteditor gefragt. Nano wird als das am einfachsten zu verwendende Programm vorgeschlagen. Sie können einen beliebigen Befehlszeilen-Texteditor wie Vim oder Emacs verwenden. Es liegt wirklich an Ihnen.

Wenn es dir zuerst nicht gelingt, Sudo

Wenn Sie versuchen, crontab -e Befehl ausführen, aber dieses Ergebnis nicht erhalten, verfügen Sie möglicherweise nicht über die Benutzerrechte zum Erstellen der Tabelle. Wenn Sie sudo-Zugriff haben, können Sie sudo verwenden, um die Crontab festzulegen.

sudo crontab -e <your_username>

Ihr System lädt Ihre Crontab automatisch in das richtige Ziel, das je nach Distribution variieren kann, sich aber häufig in einem Verzeichnis wie /var/spool/cron/crontabs befindet . Versuchen Sie nicht, Dateien hier zu bearbeiten.

Was passiert, wenn der Cronjob auf einen Fehler stößt?

Das Standardverhalten ist das Versenden der Ausgabe per E-Mail. Diese Funktion ist für Administratoren konzipiert, die Protokolle automatisch an eine „lokale“ E-Mail-Adresse in der Netzwerkdomäne senden lassen können.

Sie können dies selbst einrichten, wenn Sie einen Mailserver haben. Es gibt auch Möglichkeiten, die E-Mail-Ausgabe an GMail oder ähnliche Dienste zu automatisieren. Diese Methoden gehen jedoch über den Rahmen dieses Artikels hinaus.

Stattdessen sehen wir uns zwei gängige Wege an, um den Fehler zu umgehen.

1) Ausgabe in eine Datei senden

Sie können eine Datei angeben, an die dieser Ausgabetyp gesendet werden soll, und dann >> verwenden um die Ausgabe umzuleiten.

Mit >> fügt Informationen an eine vorhandene Datei an, während ein einzelner > Symbol überschreibt die Datei. Dies ist wichtig zu wissen, wenn Sie eine große Protokolldatei verwalten möchten, die Datensätze häufig aktualisiert. Beide erstellen die Datei automatisch, wenn sie nicht existiert.

Cron-Job-Beispiel:

0 * * * *  echo "Linux is Cool!" >> ~/crontab_log.txt

2) Verwenden Sie /dev/null

Dadurch wird die E-Mail-Option umgangen, indem die Daten im Wesentlichen gelöscht werden. Standardfehler ('2') und Standardausgabe ('1') werden beide an die Nulldatei gesendet.

0 0 * * * echo "Why are you silencing me every night at midnight?" > /dev/null 2>&1

Sie haben vielleicht bemerkt, dass ich Echobefehle für die Beispiele verwende. Dafür gibt es keinen besonderen Grund, aber es macht es einfach, Änderungen zu überprüfen und „Ihre Arbeit zu überprüfen“.

Wenn Sie etwas programmiert haben, haben Sie möglicherweise Druckbefehle verwendet, um Ihre Logik zu testen. Dies ist das gleiche Konzept.

Lassen Sie uns versuchen, einen eigenen Cronjob einzurichten. Wenn Sie bereits „mitgespielt“ haben, ist das großartig. Wenn nicht, ist es jetzt an der Zeit, das Terminal fertig zu machen und Spaß zu haben.

Crontab-Beispiele:Planungsbefehle und -skripts

Ich habe Ihnen ein paar Beispiele gezeigt, während ich erklärt habe, wie die Ausgabe geroutet wird. Waren diese für Sie sinnvoll?

Lassen Sie mich das erste Beispiel durchgehen.

Minute Stunde Tag-Datum Monat Tagesname Befehl
0 * * * * echo „Linux ist cool!“>> ~/crontab_log.txt

Wenn Sie den Minutenwert auf „0“ setzen, wird der Befehl jede Stunde zur vollen Stunde ausgeführt.

Erweiterte Jobpläne

Sie können mehrere Werte gleichzeitig bearbeiten. Wenn Sie möchten, können Sie alle 5 Sternchen durch Spezifikationen ersetzen.

Minute Stunde Tag-Datum Monat Tagesname Befehl
*/5 3-6 */5 */2 0,6 echo „Linux ist cool!“>> ~/crontab_log.txt

Irgendeine Ahnung, was dieser sagt? Für dieses Tutorial habe ich diesen Job besonders verwirrend gemacht. Es wäre ungewöhnlich, etwas mit so vielen Parametern „in freier Wildbahn“ zu haben, aber mal sehen, ob Sie es entziffern können. Für so etwas arbeite ich mich gerne rückwärts durch die Felder.

Lassen Sie uns das gemeinsam versuchen:

Feld Wert Bedeutung
Tagesname 0,6 Samstag und Sonntag
Monat */2 Jeden Monat, der durch 2 (gerade) Monate teilbar ist.
Tag Datum * Jedes Datum
Stunde 3-6 Zwischen 3 und 6 Uhr
Minuten */5 Alle 5 Minuten

Im Klartext:

Dieser Befehl wird also jeden zweiten Monat an Wochenenden, unabhängig vom Datum, alle 5 Minuten zwischen 3:00 und 6:00 Uhr ausgeführt.

Wow, das war verworren. Wenn Sie dem folgen konnten, sind Sie bereit, mit den Besten von ihnen zu cronen.

Schreiben Sie ein einfaches Cron-Automatisierungsskript zum Sichern von Dateien

Bis zu diesem Punkt haben die Cron-Jobs, die Sie geschrieben haben, nur eine Sache getan. Das kann nützlich sein, aber vielleicht möchten Sie mehrere Aufgaben erledigen.

Glücklicherweise ist dies nicht nur möglich, sondern auch sehr einfach. Wenn Sie sich an das ursprüngliche Syntaxbeispiel erinnern, können Sie auch einen Pfad zu einem Skript verwenden.

Dies ist nicht nur auf Bash beschränkt, Sie können auch ein Skript implementieren, das Python oder Perl verwendet, wenn Sie möchten.

Was sind unsere Ziele?

  • Jobs werden jede Nacht um 3 Uhr bearbeitet
  • Sichern Sie den Ordner /Documents in einer ZIP-Datei
  • Erzeuge eine Textdatei mit einer Liste von allem im Verzeichnis
  • Erstellen Sie einen Archivordner, der unsere Sicherungs- und Textdatei in einen Unterordner mit dem aktuellen Datum klont

our_backup_script.sh

#! /bin/bash

DATE=$(date +%d-%m-%Y)
# Date in format DAY##-MONTH##-YEAR####

mkdir -p ~/archive/$DATE
# create a folder for today's date in the archive, if archive doesn't exist, make archive 
ls -al ~/Documents > ~/archive/$DATE/contents.txt
# create a text file listing the contents of the documents folder
cd ~/  && tar -cpzf $DATE.docs.backup.gz Documents/*
# change to parent directory to tar /Documents folder
cp ~/$DATE.docs.backup.gz ~/archive/$DATE/documents_archive.gz
# one .gz file is left in the home directory, a clone is sent to our archive under it's date
[email protected]:~$ ls
 Desktop     Downloads   Music                  Pictures   Public      Videos
 Documents   ENV         our_backup_script.sh   projects   Templates  'VirtualBox VMs'
[email protected]:~$ bash our_backup_script.sh 
[email protected]:~$ ls
 25-11-2019.docs.backup.gz   Documents   Music                  projects    Videos
 archive                     Downloads   our_backup_script.sh   Public     'VirtualBox VMs'
 Desktop                     ENV         Pictures               Templates
[email protected]:~$ ls archive/25-11-2019/
contents.all_files.txt  documents_archive.gz

Alles, was noch zu tun ist, macht dieses Skript zu einem Cron-Job.

crontab -e

Und fügen Sie dort Folgendes hinzu:

0 3 * * * bash ~/our_backup_script.sh

War deiner erfolgreich? Meins war. Tatsächlich gefiel mir die Idee so gut, dass ich dies vielleicht einfach als tägliches Backup behalte. Eine Änderung, die ich vornehmen werde, besteht darin, mein Archiv in einen Ordner auf meinem Computer zu verschieben, der mit dem Cloud-Speicher synchronisiert wird.

Eine andere Möglichkeit, Jobs unter Linux zu planen, ist die Verwendung von at command. Vielleicht interessieren Sie sich auch dafür.

Haben Sie Ideen für ein Skript, das Sie erstellen möchten? Hat Ihnen dieser Artikel geholfen, crontab besser zu verstehen? Teilen Sie es uns in den Kommentaren mit.


Linux
  1. wc Linux-Befehl mit Beispielen

  2. Linux Tee-Befehl mit Beispielen

  3. Linux-Kopfbefehl mit Beispielen

  4. JQ-Befehl in Linux mit Beispielen

  5. 6 Beispiele für Linux-Crontab-Befehle

Tr-Befehl in Linux mit Beispielen

15 Linux-PS-Befehl mit Beispielen

Linux-CD-Befehl mit Beispielen

Linux Crontab:15 fantastische Cron-Job-Beispiele

So planen Sie Jobs mit Cron in Linux

10 nützliche Cron-Beispiele zum Planen von Jobs unter Linux