<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://www.xinux.net/index.php?action=history&amp;feed=atom&amp;title=Systemd_Baustein_Timer</id>
	<title>Systemd Baustein Timer - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://www.xinux.net/index.php?action=history&amp;feed=atom&amp;title=Systemd_Baustein_Timer"/>
	<link rel="alternate" type="text/html" href="https://www.xinux.net/index.php?title=Systemd_Baustein_Timer&amp;action=history"/>
	<updated>2026-10-21T13:45:25Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Xinux Wiki</subtitle>
	<generator>MediaWiki 1.35.1</generator>
	<entry>
		<id>https://www.xinux.net/index.php?title=Systemd_Baustein_Timer&amp;diff=73775&amp;oldid=prev</id>
		<title>Thomas.will: Neue Seite: Baustein Timer</title>
		<link rel="alternate" type="text/html" href="https://www.xinux.net/index.php?title=Systemd_Baustein_Timer&amp;diff=73775&amp;oldid=prev"/>
		<updated>2026-10-17T15:47:29Z</updated>

		<summary type="html">&lt;p&gt;Neue Seite: Baustein Timer&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;[[Kategorie:systemd]]&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Baustein !! ab Stufe !! Lernpfad&lt;br /&gt;
|-&lt;br /&gt;
| '''Timer''' || [[Systemd Stufe 2 Fortgeschritten|Stufe 2]] || [[Systemd Lernpfad|Übersicht]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Einfach erklärt=&lt;br /&gt;
*Ein '''Timer''' ist eine Unit, die zu einer bestimmten Zeit eine andere Unit startet. Er ersetzt cron.&lt;br /&gt;
*Zu jedem Timer gehört ein Service mit gleichem Namen: backup.timer startet backup.service.&lt;br /&gt;
*Vorteil gegenüber cron: Jeder Lauf steht im Journal, man sieht den Erfolg in systemctl status, und verpasste Läufe können nachgeholt werden.&lt;br /&gt;
&lt;br /&gt;
=Das Wichtigste=&lt;br /&gt;
*'''Aktiviert wird der Timer''', nicht der Service: systemctl enable --now backup.timer&lt;br /&gt;
*Der Service bekommt meist '''Type=oneshot''' und '''keinen''' [Install]-Teil.&lt;br /&gt;
*'''OnCalendar=''' für feste Zeiten, '''OnBootSec='''/'''OnUnitActiveSec=''' für Abstände.&lt;br /&gt;
*'''Persistent=true''' holt Läufe nach, die verpasst wurden, weil der Rechner aus war.&lt;br /&gt;
&lt;br /&gt;
=Ein Timer=&lt;br /&gt;
*/etc/systemd/system/backup.service&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Nächtliches Backup&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=oneshot&lt;br /&gt;
ExecStart=/usr/local/sbin/backup.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
*/etc/systemd/system/backup.timer&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Backup jede Nacht um 2 Uhr&lt;br /&gt;
&lt;br /&gt;
[Timer]&lt;br /&gt;
OnCalendar=*-*-* 02:00:00&lt;br /&gt;
Persistent=true&lt;br /&gt;
RandomizedDelaySec=15min&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=timers.target&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
*systemctl daemon-reload&lt;br /&gt;
*systemctl enable --now backup.timer&lt;br /&gt;
*systemctl list-timers backup.timer&lt;br /&gt;
*'''RandomizedDelaySec=''' verteilt den Start zufällig. So greifen nicht alle Server gleichzeitig auf den Backup-Server zu.&lt;br /&gt;
&lt;br /&gt;
=Zeitangaben=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! OnCalendar= !! Bedeutung&lt;br /&gt;
|-&lt;br /&gt;
| hourly || jede volle Stunde&lt;br /&gt;
|-&lt;br /&gt;
| daily || täglich um 0 Uhr&lt;br /&gt;
|-&lt;br /&gt;
| weekly || montags um 0 Uhr&lt;br /&gt;
|-&lt;br /&gt;
| *-*-* 02:00:00 || täglich um 2 Uhr&lt;br /&gt;
|-&lt;br /&gt;
| Mon..Fri 07:30 || werktags um 7:30&lt;br /&gt;
|-&lt;br /&gt;
| *-*-01 03:00 || am Ersten jedes Monats um 3 Uhr&lt;br /&gt;
|-&lt;br /&gt;
| *:0/15 || alle 15 Minuten&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Abstände !! Bedeutung&lt;br /&gt;
|-&lt;br /&gt;
| OnBootSec=15min || 15 Minuten nach dem Start&lt;br /&gt;
|-&lt;br /&gt;
| OnUnitActiveSec=1h || eine Stunde nach dem letzten Lauf&lt;br /&gt;
|-&lt;br /&gt;
| OnActiveSec=30s || 30 Sekunden nach dem Aktivieren des Timers&lt;br /&gt;
|}&lt;br /&gt;
*Zeitangaben testen, bevor man sie einträgt:&lt;br /&gt;
*systemd-analyze calendar &amp;quot;Mon..Fri 07:30&amp;quot;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  Original form: Mon..Fri 07:30&lt;br /&gt;
Normalized form: Mon..Fri *-*-* 07:30:00&lt;br /&gt;
    Next elapse: Mon 2026-10-19 07:30:00 CEST&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Anzeigen=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Befehl !! Wirkung&lt;br /&gt;
|-&lt;br /&gt;
| systemctl list-timers || alle aktiven Timer mit nächstem und letztem Lauf&lt;br /&gt;
|-&lt;br /&gt;
| systemctl list-timers --all || auch die inaktiven&lt;br /&gt;
|-&lt;br /&gt;
| systemctl status backup.timer || Zustand und nächster Lauf (Trigger)&lt;br /&gt;
|-&lt;br /&gt;
| journalctl -u backup.service || Ausgabe der Läufe&lt;br /&gt;
|-&lt;br /&gt;
| systemctl start backup.service || einmal sofort von Hand laufen lassen&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Einmalig ohne Datei: systemd-run=&lt;br /&gt;
*In 10 Minuten einmal ausführen:&lt;br /&gt;
*systemd-run --on-active=10min /usr/local/sbin/backup.sh&lt;br /&gt;
*Morgen um 6 Uhr einmal:&lt;br /&gt;
*systemd-run --on-calendar=&amp;quot;2026-10-18 06:00&amp;quot; /usr/local/sbin/backup.sh&lt;br /&gt;
*Diese Timer überleben keinen Neustart.&lt;br /&gt;
&lt;br /&gt;
=cron und Timer=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! !! cron !! systemd-Timer&lt;br /&gt;
|-&lt;br /&gt;
| Konfiguration || eine Zeile || zwei Dateien&lt;br /&gt;
|-&lt;br /&gt;
| Logs || per Mail oder selbst umleiten || automatisch im Journal&lt;br /&gt;
|-&lt;br /&gt;
| Verpasste Läufe || weg || mit Persistent=true nachgeholt&lt;br /&gt;
|-&lt;br /&gt;
| Abhängigkeiten || keine || After=, Requires= wie bei jeder Unit&lt;br /&gt;
|-&lt;br /&gt;
| Härtung || keine || alle Optionen aus [[Systemd Stufe 3 Security|Stufe 3]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Beispiel: Zertifikate erneuern=&lt;br /&gt;
*Debian liefert mit dem Paket certbot schon einen fertigen '''certbot.timer''' mit.&lt;br /&gt;
*systemctl list-timers certbot.timer&lt;br /&gt;
*Wer einen eigenen schreibt, muss ihn mit '''enable --now''' aktivieren. Nur '''start''' ist nach dem Neustart weg.&lt;br /&gt;
&lt;br /&gt;
=Stolperfallen=&lt;br /&gt;
*'''Service aktiviert statt Timer.''' Dann läuft der Dienst einmal beim Start, nicht nach Zeitplan.&lt;br /&gt;
*'''Timer geändert''' und nichts passiert: daemon-reload und '''systemctl restart backup.timer'''.&lt;br /&gt;
*'''Trigger: n/a''' in status heißt: Der Timer hat keinen nächsten Termin. Meist ein Fehler in OnCalendar=, mit systemd-analyze calendar prüfen.&lt;br /&gt;
*'''Zeitzone:''' OnCalendar= nutzt die lokale Zeit. Am Ende eine Zone angeben geht auch: *-*-* 02:00 UTC&lt;br /&gt;
*'''Sicherheit:''' Timer sind ein beliebter Ort für Angreifer. systemctl list-timers --all gehört zu jeder Prüfung, siehe [[Systemd Stufe 3 Security|Stufe 3]].&lt;br /&gt;
&lt;br /&gt;
=Aufgaben=&lt;br /&gt;
==Grundaufgaben==&lt;br /&gt;
#Lassen Sie sich alle Timer anzeigen. Welcher läuft als Nächstes?&lt;br /&gt;
#Schreiben Sie einen Timer, der jede Minute das Datum an /tmp/zeit.log anhängt.&lt;br /&gt;
#Prüfen Sie mit journalctl, ob er läuft.&lt;br /&gt;
#Testen Sie mit systemd-analyze calendar: „jeden Sonntag um 23 Uhr“.&lt;br /&gt;
==Für Schnelle==&lt;br /&gt;
#Stellen Sie einen Ihrer cron-Jobs auf einen Timer um.&lt;br /&gt;
#Schalten Sie den Rechner zur Zeit des Timers aus und prüfen Sie, ob Persistent=true den Lauf nachholt.&lt;br /&gt;
#Starten Sie mit systemd-run einen Befehl in 2 Minuten und finden Sie den Timer in list-timers.&lt;br /&gt;
&lt;br /&gt;
=Weiter=&lt;br /&gt;
*[[Systemd Lernpfad|Übersicht: Lernpfad systemd]]&lt;br /&gt;
*Alte Seiten: [[Systemd Service timers]] · [[Systemd-time-beschreibung]] · [[Systemd Certbot Apache Timer]]&lt;/div&gt;</summary>
		<author><name>Thomas.will</name></author>
	</entry>
</feed>