Lässt es sich mit cremefarbenem Papier, einer Tönung, mehr Kontrast oder größerer Schrift besser lesen? Wählen Sie Ihre Farben und Ihre Schrift, einmalig für alle Seiten.

Kostenlose Lektion

Hintergrunddienste und geplante Aufgaben (systemd, cron)

Nach dieser Lektion: Ich kann ein Programm als Dienst betreiben und eine Aufgabe zeitlich planen.

Lektion, 55 Min.8 BefehleLinux-Administrationslab: Benutzer, Berechtigungen, cron und systemd im Browser

Der Wochenbericht, den niemand startete

Ein Laden will jeden Montag um sechs Uhr seinen Lagerbericht. Monatelang startete ihn eine Mitarbeiterin von Hand.

An einem Montag war sie krank, und der Bericht kam nicht.

Wiederkehrende Arbeit sollte eine Maschine erledigen. Sie sollte auch wichtige Programme ohne Hilfe am Laufen halten.

Am Ende dieser Lektion

Notiz

Ich kann ein Programm als Dienst betreiben und eine Aufgabe zeitlich planen.

Schlüsselwörter

BegriffWas er bedeutetBeispiel
Dienstein Programm, das das System im Hintergrund am Laufen hält
systemddas Programm, das Dienste startet und überwachtsystemctl
Unit-Dateieine kleine Datei, die systemd einen Dienst beschreibt
Aktiviereneinen Dienst bei jedem Systemstart mitstarten lassen (enable)
Crondas Programm, das Aufgaben zu festen Zeiten ausführt
Cron-Jobeine Zeile mit einer Zeitangabe und einem Befehl15 6 * * 1

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

systemd betreibt Dienste

Ein Dienst ist ein Programm, das immer laufen soll, etwa ein Webserver oder ein Mailer. Unter Ubuntu startet systemd sie beim Hochfahren und überwacht sie.

Mit systemctl sprechen Sie mit systemd. Sie fragen, ob ein Dienst läuft (is-active) und ob er beim Start mitstartet (is-enabled).

Läuft der Dienst cron?

Befehl
systemctl is-active cron

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Startet er beim Hochfahren?

Befehl
systemctl is-enabled cron

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Alles auf einen Blick

Befehl
systemctl status cron --no-pager

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Die Unit-Datei, die systemd für cron liest

Befehl
systemctl cat cron --no-pager

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Ein Beispiel: die Verben von systemctl

BefehlWirkungWirkt nach einem Neustart noch?
systemctl start mailerStartet ihn jetztNein
systemctl stop mailerHält ihn jetzt anNein
systemctl restart mailerHält ihn an und startet ihn neuNein
systemctl enable mailerStartet ihn bei jedem HochfahrenJa
systemctl disable mailerNimmt ihn aus dem Start herausJa

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Eine Unit-Datei hat drei Teile

Eine Unit-Datei ist Klartext. Eine selbst geschriebene liegt in /etc/systemd/system, eine aus einem Paket in /usr/lib/systemd/system. [Unit] beschreibt den Dienst. [Service] sagt in ExecStart, was läuft, und in Restart, ob er nach einem Fehler zurückkommt. [Install] sagt, wann er starten soll. Der nächste Block zeigt eine für ein Programm namens laden-mailer.

Eine Unit-Datei für ein anderes Programm

Code: bash
[Unit]
Description=Mailer des Ladens

[Service]
ExecStart=/usr/local/bin/laden-mailer
Restart=on-failure

[Install]
WantedBy=multi-user.target

Ein häufiger Fehler

Warnung

Viele glauben, systemctl start bringe einen Dienst auch nach einem Neustart zurück. Das tut es nicht. start startet ihn jetzt. enable startet ihn beim Hochfahren. Braucht ein Dienst beides, bekommt er beides.

Cron führt Befehle zu festen Zeiten aus

Eine Cron-Zeile hat fünf Zeitfelder und dann den Befehl. Die Felder sind Minute, Stunde, Tag des Monats, Monat und Wochentag.

Ein Stern * heißt jeder Wert. Eine Zahl heißt genau dieser Wert. Im Minutenfeld heißt */10 alle zehn Minuten: 0, 10, 20 und so weiter.

Ein Beispiel: Cron-Zeiten lesen

FelderLäuft
15 6 * * 1Montags um 06:15
0 * * * *Zu Beginn jeder Stunde
*/10 * * * *Alle zehn Minuten
0 9 1 * *Am Ersten jedes Monats um 09:00
30 23 * * 5Freitags um 23:30

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Ihre eigene Liste von Jobs

Befehl
crontab -l

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Zwei Beispielzeilen für Cron

Code: bash
# Minute Stunde Tag Monat Wochentag Nutzer Befehl
15 6 * * 1 root /usr/local/bin/wochenbericht.sh
*/10 * * * * root /usr/local/bin/lagerabgleich.sh

Der Systemordner hat ein Feld mehr

Die eigene Liste eines Nutzers, die crontab -l zeigt, hat die fünf Zeitfelder und dann den Befehl.

Eine Datei in /etc/cron.d hat zusätzlich den Nutzer, als der der Befehl läuft. Er steht zwischen Zeit und Befehl. Cron überspringt eine Datei, die ihm nicht gefällt, und auf dem Bildschirm erscheint nichts. Der Besitzer muss root sein, und niemand sonst darf hineinschreiben. Der Name darf keinen Punkt enthalten, bericht.cron wird also übersprungen. Die letzte Zeile muss mit einem Zeilenumbruch enden.

Der Systemordner für Jobs

Befehl
ls -l /etc/cron.d

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Ein Skript, das auf seinen Zeitplan wartet

Befehl
cat /usr/local/bin/backup.sh

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

systemd hat auch eigene Timer

Befehl
systemctl list-timers --no-pager

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Weiterführend

Im Feld für den Wochentag liest cron 1-5 als Montag bis Freitag. Schreiben Sie auf Papier die Zeile für eine Datei in /etc/cron.d, die /usr/local/bin/lagerabgleich.sh als root nur werktags um 22:45 startet.

Sagen Sie dann, wann sie als Nächstes läuft, wenn es jetzt Freitag 23:00 Uhr ist.

Über dieses Lab und seinen Quellcode: Linux-Administrationslab: Benutzer, Berechtigungen, cron und systemd im Browser

Sie unterrichten eine Gruppe? Weisen Sie dieses Modul Ihren Studierenden zu, mit Handbuch für Lehrende, automatisch geprüften Aufgaben und einem Lab für jede Person.