Aufgabenplanung mit at und cron unter Linux

CompTIACompTIABeginner
Jetzt üben

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einleitung

In diesem Labor lernen Sie die Grundlagen der Aufgabenplanung in einer Linux-Umgebung kennen. Sie werden zwei wesentliche Befehlszeilenprogramme untersuchen: at zur Planung von einmaligen Jobs, die zu einer bestimmten zukünftigen Zeit ausgeführt werden sollen, und cron zur Automatisierung wiederkehrender Aufgaben, die regelmäßig ausgeführt werden müssen, wie z. B. täglich, wöchentlich oder monatlich.

Sie beginnen mit der Vorbereitung Ihrer Laborumgebung und stellen sicher, dass die at- und cron-Dienste installiert und aktiv sind. Anschließend üben Sie das Erstellen eines einmaligen Jobs mit dem at-Befehl und die Verwaltung der Jobwarteschlange mit atq und atrm. Abschließend verwenden Sie den crontab-Befehl, um einen wiederkehrenden Cron-Job zu erstellen, zu überprüfen und zu entfernen, was Ihnen praktische Erfahrung in der Automatisierung von Systemadministrationsaufgaben vermittelt.

Vorbereitung der Laborumgebung

In diesem Schritt bereiten Sie die Laborumgebung vor, indem Sie die notwendigen Werkzeuge für die Aufgabenplanung unter Linux installieren. Die beiden Hauptwerkzeuge, die wir verwenden werden, sind at für einmalige Aufgaben und cron für wiederkehrende Aufgaben. Während cron normalerweise auf den meisten Linux-Systemen vorinstalliert ist, muss das at-Dienstprogramm möglicherweise manuell installiert werden.

Zuerst aktualisieren wir die Paketliste, um sicherzustellen, dass wir die neueste Version der Software abrufen können.

sudo apt-get update

Sie sehen die Ausgabe, während die Paketlisten aus den Repositories heruntergeladen werden.

Als Nächstes installieren Sie das at-Paket mit dem apt-get-Befehl. Das Flag -y bestätigt die Installation automatisch, sodass Sie nicht aufgefordert werden.

sudo apt-get install -y at

Die Ausgabe zeigt den Fortschritt der Installation. Sobald diese abgeschlossen ist, ist der at-Befehl auf Ihrem System verfügbar.

Der at-Befehl ist auf einen Hintergrunddienst (Daemon) namens atd angewiesen, um geplante Jobs auszuführen. Wir müssen sicherstellen, dass dieser Dienst läuft. Sie können seinen Status mit dem systemctl-Befehl überprüfen.

sudo systemctl status atd

Die Ausgabe sollte anzeigen, dass der Dienst active (running) ist.

● atd.service - Deferred execution scheduler
     Loaded: loaded (/lib/systemd/system/atd.service; enabled; vendor preset: enabled)
     Active: active (running) since <date_time>; <time_ago>
       Docs: man:atd(8)
   Main PID: <pid> (atd)
      Tasks: 1 (limit: 4622)
     Memory: 248.0K
        CPU: 11ms
     CGroup: /system.slice/atd.service
             └─<pid> /usr/sbin/atd -f

Wenn der Dienst nicht aktiv ist, können Sie ihn mit dem folgenden Befehl starten:

sudo systemctl start atd

Schließlich überprüfen wir, ob der cron-Dienst ebenfalls aktiv ist, da wir ihn in einem späteren Schritt verwenden werden.

sudo systemctl status cron

Die Ausgabe sollte ebenfalls active (running) anzeigen und bestätigen, dass der cron-Daemon bereit ist, geplante Aufgaben zu verarbeiten.

● cron.service - Regular background program processing daemon
     Loaded: loaded (/lib/systemd/system/cron.service; enabled; vendor preset: enabled)
     Active: active (running) since <date_time>; <time_ago>
       Docs: man:cron(8)
   Main PID: <pid> (cron)
      Tasks: 1 (limit: 4622)
     Memory: 1.1M
        CPU: 40ms
     CGroup: /system.slice/cron.service
             └─<pid> /usr/sbin/cron -f

Da sowohl die atd- als auch die cron-Dienste laufen, ist Ihre Umgebung nun vollständig für die Planung von Prozessen vorbereitet.

Einen einmaligen Job mit dem at-Befehl planen

In diesem Schritt lernen Sie, wie Sie mit dem at-Befehl eine Aufgabe planen, die einmalig zu einem zukünftigen Zeitpunkt ausgeführt werden soll. Dies ist nützlich für die Ausführung von Skripten oder Befehlen, die Sie nicht sofort ausführen müssen, aber auch nicht regelmäßig wiederholen müssen. Der at-Befehl liest eine Reihe von Befehlen aus der Standardeingabe und sammelt sie zu einem einzigen "at-Job", der zu einer bestimmten Zeit ausgeführt wird.

Planen wir einen einfachen Befehl, der eine Datei namens at_output.txt in Ihrem aktuellen Projektverzeichnis (~/project) erstellt. Wir legen fest, dass sie eine Minute ab jetzt ausgeführt werden soll.

Rufen Sie zuerst den at-Befehl mit der gewünschten Zeitspezifikation auf.

at now + 1 minute

Nachdem Sie Enter gedrückt haben, ändert sich die Eingabeaufforderung Ihres Terminals zu at>. Dies zeigt an, dass at darauf wartet, dass Sie die Befehle eingeben, die Sie planen möchten. Geben Sie nun den Befehl zum Erstellen der Datei ein und schreiben Sie etwas Text hinein.

echo "The at job executed successfully." > ~/project/at_output.txt

Drücken Sie nach der Eingabe des Befehls Enter. Um den Job abzuschließen und die at>-Eingabeaufforderung zu verlassen, drücken Sie Strg-D (halten Sie die Strg-Taste gedrückt und drücken Sie D). Sie sehen eine Bestätigungsmeldung, dass der Job geplant wurde, zusammen mit seiner Jobnummer und Ausführungszeit.

warning: commands will be executed using /bin/sh
job 1 at Mon Jan 1 12:01:00 2024

Nun müssen Sie eine Minute warten, bis der geplante Job ausgeführt wird.

Nachdem eine Minute vergangen ist, können Sie überprüfen, ob der Job ausgeführt wurde, indem Sie die Existenz der Datei at_output.txt prüfen. Verwenden Sie den Befehl ls -l, um die Details der Datei anzuzeigen.

ls -l ~/project/at_output.txt

Wenn der Job erfolgreich ausgeführt wurde, wird die Datei in der Ausgabe aufgeführt.

-rw-r--r-- 1 labex labex 35 Jan  1 12:01 /home/labex/project/at_output.txt

Als Nächstes zeigen Sie den Inhalt der Datei mit dem cat-Befehl an, um sicherzustellen, dass der echo-Befehl wie erwartet funktioniert hat.

cat ~/project/at_output.txt

Sie sollten die folgende Ausgabe in Ihrem Terminal sehen:

The at job executed successfully.

Um Ihr Projektverzeichnis für die nächsten Schritte sauber zu halten, entfernen Sie abschließend die gerade erstellte Datei.

rm ~/project/at_output.txt

Sie haben nun erfolgreich einen einmaligen Job mit dem at-Befehl geplant, überprüft und aufgeräumt.

Anstehende Jobs mit atq und atrm verwalten

In diesem Schritt lernen Sie, wie Sie geplante at-Jobs anzeigen und abbrechen können. Es ist üblich, eine Aufgabe zu planen und später festzustellen, dass sie nicht mehr benötigt wird oder geändert werden muss. Der atq-Befehl ermöglicht es Ihnen, die Warteschlange der anstehenden Jobs anzuzeigen, und der atrm-Befehl ermöglicht es Ihnen, diese zu entfernen.

Zuerst planen wir einen Job, der weit genug in der Zukunft liegt, damit wir Zeit haben, ihn zu verwalten. Wir planen einen Befehl, der in 10 Minuten ausgeführt werden soll.

at now + 10 minutes

An der at>-Eingabeaufforderung geben Sie einen Befehl zum Erstellen einer Datei ein. Wir nennen die Datei temporary_job.txt.

touch ~/project/temporary_job.txt

Drücken Sie Enter und dann Strg-D, um den Job zu speichern. Das System bestätigt die Joberstellung und zeigt die Jobnummer an. Notieren Sie sich diese Jobnummer, da Sie sie zum Entfernen des Jobs benötigen.

warning: commands will be executed using /bin/sh
job 2 at Mon Jan 1 12:10:00 2024

(Hinweis: Ihre Jobnummer und Zeit werden anders sein.)

Um nun die Liste aller Ihrer anstehenden Jobs anzuzeigen, verwenden Sie den Befehl atq (at queue).

atq

Die Ausgabe listet Ihren geplanten Job auf und zeigt seine Jobnummer, das Datum und die Uhrzeit der geplanten Ausführung, die Warteschlange, in der er sich befindet (a), und den Benutzer, der ihn geplant hat.

2	Mon Jan 1 12:10:00 2024 a labex

Angenommen, Sie haben entschieden, dass dieser Job nicht mehr ausgeführt werden soll. Sie können ihn mit dem Befehl atrm (at remove) gefolgt von der zuvor notierten Jobnummer abbrechen.

Ersetzen Sie <job_number> im folgenden Befehl durch Ihre tatsächliche Jobnummer. Wenn Ihre Jobnummer beispielsweise 2 war, würden Sie atrm 2 ausführen.

atrm <job_number>

Der Befehl erzeugt keine Ausgabe, wenn er den Job erfolgreich entfernt.

Um zu überprüfen, ob der Job aus der Warteschlange entfernt wurde, führen Sie atq erneut aus.

atq

Diesmal sollte der Befehl keine Ausgabe erzeugen. Diese Stille bestätigt, dass Ihre at-Jobwarteschlange leer ist und die Datei temporary_job.txt nicht erstellt wird.

Einen wiederkehrenden Job mit crontab -e erstellen

In diesem Schritt lernen Sie, wie Sie eine wiederkehrende Aufgabe mit cron planen. Im Gegensatz zu at, das einen Job einmal ausführt, ist cron dafür konzipiert, Jobs wiederholt nach einem Zeitplan auszuführen. Sie verwalten Ihre geplanten Jobs in einer speziellen Datei namens crontab.

Um die crontab-Datei Ihres Benutzers zu bearbeiten, verwenden Sie den Befehl crontab -e. Das -e steht für "edit" (bearbeiten).

Öffnen wir die crontab-Datei zur Bearbeitung.

crontab -e

Wenn Sie crontab -e zum ersten Mal ausführen, werden Sie möglicherweise aufgefordert, einen Standardtexteditor auszuwählen. Wir empfehlen nano, da er einfach zu bedienen ist.

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

Choose 1-2 [1]:

Drücken Sie 1 und dann Enter, um nano auszuwählen. Die crontab-Datei wird geöffnet. Sie wird größtenteils leer sein, abgesehen von einigen Kommentaren, die erklären, wie sie zu verwenden ist.

Ein crontab-Eintrag hat ein bestimmtes Format mit sechs Feldern:
Minute Stunde Tag-des-Monats Monat Wochentag Befehl

Ein Sternchen (*) in einem Zeitfeld fungiert als Platzhalter und bedeutet "jeder". Für unsere Aufgabe möchten wir einen Befehl jede Minute ausführen. Dies ist perfekt zum Testen, da wir nicht lange warten müssen, um das Ergebnis zu sehen. Der Zeitplan für "jede Minute" lautet * * * * *.

Fügen Sie nun am Ende der Datei eine neue Zeile hinzu, um einen Job zu planen, der das aktuelle Datum und die aktuelle Uhrzeit an eine Protokolldatei namens cron_log.txt in Ihrem Projektverzeichnis anhängt.

* * * * * date >> ~/project/cron_log.txt

Nachdem Sie die Zeile hinzugefügt haben, sollte Ihr Editor etwa so aussehen:

## Edit this file to introduce tasks to be run by cron.
#
## Each task to run has to be defined through a single line
## indicating with different fields when the task will be run
## and what command to run for the task
#
## To define the time you can provide concrete values for
## minute (m), hour (h), day of month (dom), month (mon),
## and day of week (dow) or use '*' in these fields (for 'any').
#
## Notice that tasks will be started based on the cron's system
## daemon's notion of time and timezones.
#
## Output of the crontab jobs (including errors) is sent through
## email to the user the crontab file belongs to (unless redirected).
#
## For example, you can run a backup of all your user accounts
## at 5 a.m. every week with:
## 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
#
## For more information see the manual pages of crontab(5) and cron(8)
#
## m h  dom mon dow   command
* * * * * date >> ~/project/cron_log.txt

Um die Datei zu speichern und nano zu beenden, drücken Sie Strg-X, dann Y zur Bestätigung der Änderungen und schließlich Enter, um in die Datei zu schreiben.

Sobald Sie beenden, sehen Sie eine Bestätigungsmeldung in Ihrem Terminal:

crontab: installing new crontab

Das bedeutet, dass Ihr neuer Cron-Job aktiv ist. Der cron-Daemon wird diese Datei nun jede Minute überprüfen und Ihren Befehl ausführen.

Warten Sie mindestens eine Minute. Überprüfen Sie dann, ob die Protokolldatei erstellt wurde.

ls -l ~/project/cron_log.txt

Sie sollten die Datei aufgelistet sehen.

-rw-r--r-- 1 labex labex 29 Jan  1 12:15 /home/labex/project/cron_log.txt

Zeigen Sie nun deren Inhalt an.

cat ~/project/cron_log.txt

Die Ausgabe zeigt das Datum und die Uhrzeit an, zu der der Befehl zum ersten Mal ausgeführt wurde.

Mon Jan  1 12:15:01 UTC 2024

Wenn Sie noch eine Minute warten und den cat-Befehl erneut ausführen, sehen Sie eine neue Zeile mit einem aktualisierten Zeitstempel, was zeigt, dass der Job wiederholt ausgeführt wird.

Einen Cron-Job mit crontab -l und -r überprüfen und entfernen

In diesem letzten Schritt lernen Sie, wie Sie Ihre geplanten Cron-Jobs anzeigen, ohne den Editor zu öffnen, und wie Sie sie vollständig entfernen. Dies sind wesentliche Verwaltungsaufgaben, um die geplanten Aufgaben Ihres Systems organisiert und sauber zu halten.

Zuerst listen wir die aktuell aktiven Cron-Jobs auf. Der Befehl crontab -l (wobei -l für "list" steht) zeigt den Inhalt Ihrer crontab-Datei direkt im Terminal an.

crontab -l

Die Ausgabe zeigt den Job an, den Sie im vorherigen Schritt erstellt haben.

## Edit this file to introduce tasks to be run by cron.
## ... (other comments) ...
## m h  dom mon dow   command
* * * * * date >> ~/project/cron_log.txt

Dieser Befehl ist eine sichere, schreibgeschützte Methode, um zu überprüfen, welche Jobs geplant sind.

Nehmen wir nun an, Sie benötigen diesen wiederkehrenden Job nicht mehr. Um ihn zu entfernen, können Sie den Befehl crontab -r verwenden (wobei -r für "remove" steht). Seien Sie bei diesem Befehl sehr vorsichtig, da er die gesamte crontab-Datei für Ihren Benutzer entfernt, ohne eine Bestätigung zu verlangen.

Führen Sie den Befehl aus, um Ihre crontab zu entfernen.

crontab -r

Der Befehl erzeugt keine Ausgabe, wenn er erfolgreich ist.

Um zu überprüfen, ob Ihre crontab gelöscht wurde, führen Sie den List-Befehl erneut aus.

crontab -l

Diesmal gibt der Befehl eine Fehlermeldung zurück, die darauf hinweist, dass Sie keine crontab-Datei mehr haben.

no crontab for labex

Dies bestätigt, dass Ihr geplanter Job erfolgreich entfernt wurde und nicht mehr ausgeführt wird.

Um das Lab abzuschließen und Ihren Arbeitsbereich zu bereinigen, entfernen Sie abschließend die Datei cron_log.txt, die vom Cron-Job erstellt wurde.

rm ~/project/cron_log.txt

Sie haben nun erfolgreich einen Cron-Job aufgelistet, entfernt und die Entfernung verifiziert, womit der vollständige Verwaltungszyklus abgeschlossen ist.

Zusammenfassung

In diesem Lab haben Sie gelernt, wie Sie eine Linux-Umgebung für die Aufgabenplanung vorbereiten, indem Sie das Paket at installieren und überprüfen, ob die Dienste atd und cron aktiv sind. Sie haben das Planen eines einmaligen Jobs für die zukünftige Ausführung mit dem Befehl at geübt. Außerdem haben Sie gelernt, wie Sie diese ausstehenden Jobs verwalten, indem Sie die Warteschlange mit atq anzeigen und einen bestimmten Job mit atrm entfernen.

Darüber hinaus haben Sie untersucht, wie Sie wiederkehrende Aufgaben mit cron planen. Sie haben den Befehl crontab -e verwendet, um die crontab-Datei des Benutzers zu bearbeiten und einen neuen automatisierten Job hinzuzufügen. Schließlich haben Sie gelernt, wie Sie die Liste der aktuell geplanten Cron-Jobs mit crontab -l überprüfen und wie Sie alle geplanten Cron-Jobs eines Benutzers mit dem Befehl crontab -r entfernen.