Aufgabenplanung mit at und cron unter Linux

CompTIABeginner
Jetzt üben

Einführung

In diesem Lab lernen Sie die Grundlagen der Aufgabenplanung in einer Linux-Umgebung kennen. Sie werden zwei unverzichtbare Kommandozeilen-Werkzeuge erkunden: at zum Planen von einmaligen Aufträgen, die zu einem bestimmten Zeitpunkt in der Zukunft ausgeführt werden sollen, und cron zur Automatisierung wiederkehrender Aufgaben, die regelmäßig ausgeführt werden müssen (z. B. täglich, wöchentlich oder monatlich).

Sie beginnen mit der Vorbereitung Ihrer Lab-Umgebung und stellen sicher, dass die Dienste at und cron installiert und aktiv sind. Anschließend üben Sie das Erstellen eines einmaligen Auftrags mit dem Befehl at sowie die Verwaltung der Auftragswarteschlange mit atq und atrm. Schließlich verwenden Sie den Befehl crontab, um einen wiederkehrenden Cron-Job zu erstellen, zu überprüfen und zu entfernen. So erhalten Sie praktische Erfahrung in der Automatisierung typischer Administrationsaufgaben.

Lab-Umgebung vorbereiten

In diesem Schritt bereiten Sie die Lab-Umgebung vor, indem Sie die notwendigen Werkzeuge für die Aufgabenplanung unter Linux installieren. Die beiden Hauptwerkzeuge sind at für einmalige Aufgaben und cron für wiederkehrende Aufgaben. Während cron auf den meisten Linux-Systemen in der Regel vorinstalliert ist, muss das Hilfsprogramm at unter Umständen manuell installiert werden.

Aktualisieren Sie zunächst die Paketliste, um sicherzustellen, dass Sie die neueste Softwareversion beziehen können.

sudo apt-get update

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

Installieren Sie als Nächstes das Paket at mit dem Befehl apt-get. Das Flag -y bestätigt die Installation automatisch, sodass keine weitere Interaktion erforderlich ist.

sudo apt-get install -y at

Die Ausgabe zeigt den Fortschritt der Installation an. Sobald diese abgeschlossen ist, steht der Befehl at auf Ihrem System zur Verfügung.

Der Befehl at ist auf einen Hintergrunddienst (Daemon) namens atd angewiesen, um die geplanten Aufträge auszuführen. Wir müssen sicherstellen, dass dieser Dienst läuft. Sie können den Status mit dem Befehl systemctl ü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

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

sudo systemctl start atd

Überprüfen Sie abschließend, ob auch der cron-Dienst aktiv ist, da wir diesen in einem späteren Schritt benötigen werden.

sudo systemctl status cron

Die Ausgabe sollte ebenfalls active (running) zeigen, was bestätigt, 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 nun sowohl der atd- als auch der cron-Dienst laufen, ist Ihre Umgebung vollständig für die Planung von Prozessen vorbereitet.

Einen einmaligen Auftrag mit dem at-Befehl planen

In diesem Schritt lernen Sie, wie Sie mit dem Befehl at eine Aufgabe planen, die genau einmal zu einem zukünftigen Zeitpunkt ausgeführt wird. Dies ist nützlich für Skripte oder Befehle, die nicht sofort ausgeführt werden müssen, aber auch keine regelmäßige Wiederholung erfordern. Der Befehl at liest eine Reihe von Befehlen von der Standardeingabe und fasst sie zu einem "at-job" zusammen, der zum angegebenen Zeitpunkt ausgeführt wird.

Wir planen nun einen einfachen Befehl, der eine Datei namens at_output.txt in Ihrem aktuellen Projektverzeichnis (~/project) erstellt. Wir setzen die Ausführung auf eine Minute ab jetzt fest.

Rufen Sie zunächst den Befehl at mit der gewünschten Zeitangabe auf.

at now + 1 minute

Nachdem Sie die Eingabetaste gedrückt haben, ändert sich Ihre Eingabeaufforderung zu at>. Dies zeigt an, dass at auf die Eingabe der Befehle wartet, die Sie planen möchten. Geben Sie nun den Befehl ein, um die Datei zu erstellen und Text hineinzuschreiben.

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

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

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

Warten Sie nun eine Minute, bis der geplante Auftrag ausgeführt wurde.

Nach Ablauf der Minute können Sie überprüfen, ob der Auftrag ausgeführt wurde, indem Sie nach der Datei at_output.txt suchen. Verwenden Sie den Befehl ls -l, um die Details der Datei anzuzeigen.

ls -l ~/project/at_output.txt

Wenn der Auftrag erfolgreich war, wird die Datei in der Ausgabe aufgelistet.

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

Zeigen Sie anschließend den Inhalt der Datei mit dem Befehl cat 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, löschen Sie die soeben erstellte Datei.

rm ~/project/at_output.txt

Sie haben nun erfolgreich einen einmaligen Auftrag mit dem Befehl at geplant, überprüft und die Rückstände bereinigt.

Ausstehende Aufträge mit atq und atrm verwalten

In diesem Schritt lernen Sie, wie Sie geplante at-Aufträge anzeigen und abbrechen können. Es kommt häufig vor, dass man eine Aufgabe plant und später feststellt, dass sie nicht mehr benötigt wird oder geändert werden muss. Der Befehl atq ermöglicht es Ihnen, die Warteschlange der ausstehenden Aufträge einzusehen, und mit atrm können Sie diese entfernen.

Planen wir zunächst einen Auftrag weit genug in der Zukunft, damit wir Zeit haben, ihn zu verwalten. Wir planen einen Befehl für in 10 Minuten.

at now + 10 minutes

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

touch ~/project/temporary_job.txt

Drücken Sie die Eingabetaste und dann Ctrl-D, um den Auftrag zu speichern. Das System bestätigt die Erstellung und zeigt die Jobnummer an. Notieren Sie sich diese Jobnummer, da Sie sie zum Löschen des Auftrags benötigen.

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

(Hinweis: Ihre Jobnummer und die Uhrzeit werden abweichen.)

Um die Liste aller ausstehenden Aufträge zu sehen, verwenden Sie den Befehl atq (at queue).

atq

Die Ausgabe listet Ihren geplanten Auftrag auf und zeigt die Jobnummer, das Datum und die Uhrzeit der geplanten Ausführung, die Warteschlange (a) sowie den Benutzer an, der den Auftrag erstellt hat.

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

Angenommen, Sie haben sich entschieden, diesen Auftrag nicht mehr auszuführen. Sie können ihn mit dem Befehl atrm (at remove) gefolgt von der zuvor notierten Jobnummer löschen.

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

atrm <job_number>

Der Befehl erzeugt keine Ausgabe, wenn der Auftrag erfolgreich entfernt wurde.

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

atq

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

Einen wiederkehrenden Auftrag mit crontab -e erstellen

In diesem Schritt lernen Sie, wie Sie eine wiederkehrende Aufgabe mit cron planen. Im Gegensatz zu at, das einen Auftrag nur einmal ausführt, ist cron darauf ausgelegt, Aufträge wiederholt nach einem Zeitplan auszuführen. Sie verwalten Ihre geplanten Aufträge 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 Standard-Texteditor auszuwählen. Wir empfehlen nano, da er einfach zu bedienen ist.

Select an editor. To change later, run 'select-editor'.
  1. /bin/nano        <---- am einfachsten
  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 die Verwendung erklären.

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

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

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

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

Nach dem Hinzufügen der Zeile 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 verlassen, drücken Sie Ctrl-X, dann Y, um die Änderungen zu bestätigen, und schließlich Enter, um die Datei zu schreiben.

Nach dem 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

Die Datei sollte aufgelistet werden.

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

Zeigen Sie nun den Inhalt an.

cat ~/project/cron_log.txt

Die Ausgabe zeigt das Datum und die Uhrzeit der ersten Ausführung des Befehls.

Mon Jan  1 12:15:01 UTC 2024

Wenn Sie eine weitere Minute warten und den cat-Befehl erneut ausführen, sehen Sie eine neue Zeile mit einem aktualisierten Zeitstempel, was beweist, dass der Auftrag 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 können, ohne den Editor zu öffnen, und wie Sie diese vollständig entfernen. Dies sind wesentliche Verwaltungsaufgaben, um die geplanten Aufgaben Ihres Systems organisiert und sauber zu halten.

Lassen Sie uns zunächst die aktuell aktiven Cron-Jobs auflisten. 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 Auftrag an, den Sie im vorherigen Schritt erstellt haben.

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

Dieser Befehl ist eine sichere Methode (nur Lesezugriff), um zu prüfen, welche Aufgaben geplant sind.

Nehmen wir nun an, dass Sie diesen wiederkehrenden Auftrag nicht mehr benötigen. Um ihn zu entfernen, können Sie den Befehl crontab -r verwenden (wobei -r für "remove" steht). Seien Sie vorsichtig mit diesem Befehl, da er die gesamte Crontab-Datei für Ihren Benutzer löscht, ohne um Bestätigung zu bitten.

Führen Sie den Befehl aus, um Ihre Crontab zu löschen.

crontab -r

Der Befehl erzeugt keine Ausgabe, wenn er erfolgreich war.

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

crontab -l

Diesmal gibt der Befehl eine Fehlermeldung zurück, die besagt, dass Sie keine Crontab-Datei mehr haben.

no crontab for labex

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

Um das Lab abzuschließen und Ihren Arbeitsbereich zu bereinigen, löschen Sie schließlich 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 überprüft und damit den vollständigen Verwaltungszyklus durchlaufen.

Zusammenfassung

In diesem Lab haben Sie gelernt, wie Sie eine Linux-Umgebung für die Aufgabenplanung vorbereiten, indem Sie das Paket at installiert und die Aktivität der Dienste atd und cron überprüft haben. Sie haben geübt, einen einmaligen Auftrag für die zukünftige Ausführung mit dem Befehl at zu planen. Außerdem haben Sie gelernt, wie Sie diese ausstehenden Aufträge verwalten, indem Sie die Warteschlange mit atq einsehen und einen bestimmten Auftrag mit atrm löschen.

Darüber hinaus haben Sie untersucht, wie wiederkehrende Aufgaben mit cron geplant werden. Sie haben den Befehl crontab -e verwendet, um die Crontab-Datei des Benutzers zu bearbeiten und einen neuen automatisierten Auftrag 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.