{"id":805,"date":"2023-09-03T17:36:14","date_gmt":"2023-09-03T15:36:14","guid":{"rendered":"https:\/\/linux-bibel.at\/?p=805"},"modified":"2023-09-03T17:36:15","modified_gmt":"2023-09-03T15:36:15","slug":"aufgaben-mit-systemd-unter-linux-automatisch-starten-alternative-zu-cron","status":"publish","type":"post","link":"https:\/\/linux-bibel.at\/index.php\/2023\/09\/03\/aufgaben-mit-systemd-unter-linux-automatisch-starten-alternative-zu-cron\/","title":{"rendered":"Aufgaben mit Systemd unter Linux automatisch starten &#8211; Alternative zu Cron"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Meist automatisiert man unter Linux diverse wiederkehrende Aufgaben mit der System-Software Cron, die l\u00e4sst sich jedoch auch problemlos mit\u00a0<a href=\"https:\/\/linux-bibel.at\/index.php\/2023\/09\/03\/systemd-die-steuerzentrale-von-linux\/\" data-type=\"post\" data-id=\"783\">Systemd<\/a>\u00a0erledigen. Hierzu nutzt man Units des Typs &#8222;<strong>.timer<\/strong>&#8222;.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">So lassen sich etwa zeitgesteuerte Backups und vieles mehr mit Systemd automatisch ausf\u00fchren. Der Vorteil von mit Systemd-gesteuerten Aufgaben &#8211; diese k\u00f6nnen unter anderem schon w\u00e4hrend des Starts des Systems durchgef\u00fchrt werden, oder beim Herunterfahren, &#8230;<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Zeitgesteuerte Aufgaben mit Systemd anlegen<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Zwei Schritte sind notwendig um solche Aufgaben zu erstellen &#8211; besser gesagt m\u00fcssen zwei Dateien angelegt werden:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Service-Unit<\/strong>&nbsp;&#8211; Mit dieser wird dem System gezeigt, was eigentlich ausgef\u00fchrt werden soll<\/li>\n\n\n\n<li><strong>Timer-Unit<\/strong>&nbsp;&#8211; Mit dieser zeigt man dem System wann die Aufgabe ausgef\u00fchrt werden soll<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Beginnen wir mit der Service-Unit, solche vom Nutzer erstellten Dateien liegen unter &#8222;<em>\/etc\/systemd\/user\/<\/em>&#8222;, m\u00f6glich w\u00e4re nat\u00fcrlich auch das Unterverzeichnis &#8222;<em>\/etc\/systemd\/system\/<\/em>&#8220; &#8211; erstellt wird eine solche Datei am einfachsten gleich einmal mit dem Terminal-Editor Nano &#8211; nat\u00fcrlich als Administrator:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>nano \/etc\/systemd\/user\/bezeichnung.service<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Ein sehr einfaches Beispiel f\u00fcr eine solche Datei:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;Unit]\nDescription=System-Backup (Backup des kompletten Systems)\n\n&#91;Service]\nExecStart=\/pfad\/zum\/backup.sh<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">In diesem Fall w\u00fcrde Systemd die Service-Unit (<em>in diesem Beispiel mit dem Namen &#8222;<strong>bezeichnung.service<\/strong>&#8222;<\/em>) einfach beim Start des Systems starten &#8211; dies k\u00f6nnte den Start des Systems jedoch verlangsamen, deshalb erstellt man sich zus\u00e4tzlich die Timer-Unit.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Mit\u00a0<strong><kbd>Strg+o<\/kbd><\/strong>\u00a0speichern wir die Datei, best\u00e4tigen mit\u00a0<strong><kbd>Eingabe<\/kbd><\/strong>\u00a0und schlie\u00dfen den Editor mit\u00a0<strong>Strg+x<\/strong>. Mit &#8222;Description=&#8220; gibt man eine Beschreibung des Services an, mit &#8222;<strong>ExecStart=<\/strong>&#8220; wird angegeben was gestartet werden soll.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Nun gehen wir weiter zur Timer-Unit &#8211; diese hat im selben Verzeichnis zu liegen wie die Service-Unit und hat denselben Namen zu tragen. Da sich in diesem Beispiel die Service-Unit &#8222;<strong>bezeichnung.service<\/strong>&#8220; nennt wird sich die Timer-Unit &#8222;<strong>bezeichnung.timer<\/strong>&#8220; nennen:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>nano \/etc\/systemd\/user\/bezeichnung.timer<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;Unit]\nDescription=System-Backup (Backup des kompletten Systems)\n\n&#91;Timer]\nOnCalendar=*-*-* 20:15:00\nPersistent=true\nRandomizeDelaySec=20m<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Unter &#8222;<strong>Description=<\/strong>&#8220; geben wir wieder dieselbe Beschreibung wie in der Service-Unit an &#8211; wichtig ist nun vor allem der Abschnitt &#8222;<strong>[Timer]<\/strong>&#8220; &#8211; mit diesem geben Sie an wann die Aufgabe in der Service-Unit gestartet werden soll. In diesem Beispiel &#8222;<strong>OnCalendar=*-*-* 20:15:00<\/strong>&#8220; w\u00fcrde die Aufgabe t\u00e4glich &#8211; also bei jedem Systemstart &#8222;<strong>*-*-*<\/strong>&#8220; um &#8222;<strong>20:15:00<\/strong>&#8220; ausgef\u00fchrt werden.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Statt t\u00e4glich &#8211; also &#8222;*-*-*&#8220; k\u00f6nnen Sie auch genauere Angaben machen, hierzu ist folgende Syntax n\u00f6tig:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Wochentag Jahr-Monat-Tag Stunde:Minute:Sekunde<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Ein kleines Beispiel:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Fr 2021-09-30 20:15:00<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Die Sternchen ersetzen also die Angabe, wird statt der Angabe des Jahres ein Sternchen &#8222;<strong>*<\/strong>&#8220; gesetzt wird die Aufgabe jedes Jahr ausgef\u00fchrt, das zweite Sternchen ersetzt das Monat &#8211; die Aufgabe wird jedes Monat ausgef\u00fchrt und das letzte ersetzt den Tag &#8211; also t\u00e4glich. Das Beispiel oben sollten Sie nicht ganz so ernst nehmen &#8211; es dient nur als Beispiel &#8211; f\u00e4llt der 30. nicht auf einen Freitag, wird auch die Aufgabe nicht ausgef\u00fchrt.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Gibt man eine konkrete Zeit an &#8211; wie im Beispiel oben und der Rechner l\u00e4uft zu dieser Zeit nicht, sogt der Eintrag &#8222;<strong>Persistent=true<\/strong>&#8220; daf\u00fcr, dass die Aufgabe beim n\u00e4chsten Systemstart so schnell wie m\u00f6glich nachgeholt wird. Beim Systemstart werden jedoch viele Services gleichzeitig gestartet &#8211; noch eines mehr w\u00fcrde den Start verlangsamen. Hier sorgt der Eintrag &#8222;<strong>RandomizeDelaySec=20m<\/strong>&#8220; daf\u00fcr, dass die Aufgabe 20 Minuten (<strong><em>20m<\/em><\/strong>) nach dem Start des Systems ausgef\u00fchrt wird. Eine Stunde nach dem Start &#8222;<strong>1h<\/strong>&#8222;, 40 Sekunden danach &#8222;<strong>40s<\/strong>&#8220; und so weiter und so fort.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Neben der Angabe eines konkreten Datums mit Uhrzeit lassen sich Services nat\u00fcrlich auch wiederkehrend ausf\u00fchren, ein Beispiel, das auf dem oberen aufbaut:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;Unit]\nDescription=System-Backup (Backup des kompletten Systems)\n\n&#91;Timer]\nOnBootSec=5m\nPersistent=true\nRandomizeDelaySec=20m<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Die Angabe &#8222;<strong>OnBootSec=<\/strong>&#8220; gibt an, dass die Aufgabe 5 Minuten &#8222;<strong>5m<\/strong>&#8220; nach dem Start auszuf\u00fchren ist. Dies k\u00f6nnte man noch erweitern &#8211; etwa:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;Unit]\nDescription=System-Backup (Backup des kompletten Systems)\n\n&#91;Timer]\nOnBootSec=5m\nOnUnitActiveSec=1w\nPersistent=true\nRandomizeDelaySec=20m<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Hier gibt der Eintrag &#8222;<strong>OnUnitActiveSec=<\/strong>&#8220; an, dass der Service ab dem ersten Start w\u00f6chentlich &#8222;<strong>1w<\/strong>&#8222;, oder t\u00e4glich &#8222;<strong>1t<\/strong>&#8220; ausgef\u00fchrt wird.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Auch &#8222;<strong>OnCalendar=<\/strong>&#8220; k\u00f6nnen Sie anpassen, so wird mit:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>OnCalendar=daily<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">die Aufgabe t\u00e4glich ausgef\u00fchrt, weitere M\u00f6glichkeiten w\u00e4ren &#8222;<strong>weekly<\/strong>&#8222;, &#8222;<strong>minutely<\/strong>&#8220; und &#8222;<strong>hourly<\/strong>&#8222;. Soll die Aufgabe direkt beim Systemstart ausgef\u00fchrt werden &#8211; etwa um ein Programm zu starten, setzen Sie folgenden Code hinzu:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;Install]\nWantedBy=timers.target<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">F\u00fcr das oberste Beispiel also:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;Unit]\nDescription=System-Backup (Backup des kompletten Systems)\n\n&#91;Timer]\nOnCalendar=*-*-* 20:15:00\nPersistent=true\nRandomizeDelaySec=20m\n\n&#91;Install]\nWantedBy=timers.target<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Dieses Beispiel ist nat\u00fcrlich nicht ganz ernst zu nehmen &#8211; zuletzt aktivieren Sie nach der Erstellung die Timer-Unit mit dem Befehl:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>systemctl enable bezeichnung.timer<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Alternativ l\u00e4sst sich dieser auch manuell starten:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>systemctl start bezeichnung.timer<\/code><\/pre>\n<div class=\"pld-like-dislike-wrap pld-custom\">\r\n    <div class=\"pld-like-wrap  pld-common-wrap\">\r\n    <a href=\"javascript:void(0)\" class=\"pld-like-trigger pld-like-dislike-trigger  \" title=\"Gef\u00e4llt mir\" data-post-id=\"805\" data-trigger-type=\"like\" data-restriction=\"cookie\" data-already-liked=\"0\">\r\n                            <img src=\"https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/12\/Daumen-Hoch.png\" alt=\"Gef\u00e4llt mir\" \/>\r\n            <\/a>\r\n    <span class=\"pld-like-count-wrap pld-count-wrap\">1    <\/span>\r\n<\/div><div class=\"pld-dislike-wrap  pld-common-wrap\">\r\n    <a href=\"javascript:void(0)\" class=\"pld-dislike-trigger pld-like-dislike-trigger  \" title=\"Gef\u00e4llt mir nicht\" data-post-id=\"805\" data-trigger-type=\"dislike\" data-restriction=\"cookie\" data-already-liked=\"0\">\r\n                            <img src=\"https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/12\/Daumen-Runter.png\" alt=\"Gef\u00e4llt mir nicht\" \/>\r\n            <\/a>\r\n    <span class=\"pld-dislike-count-wrap pld-count-wrap\"><\/span>\r\n<\/div><\/div>","protected":false},"excerpt":{"rendered":"<p>Meist automatisiert man unter Linux diverse wiederkehrende Aufgaben mit der System-Software Cron, die l\u00e4sst sich jedoch auch problemlos mit\u00a0Systemd\u00a0erledigen. Hierzu nutzt man Units des Typs &#8222;.timer&#8222;. So lassen sich etwa zeitgesteuerte Backups und vieles mehr mit Systemd automatisch ausf\u00fchren. Der Vorteil von mit Systemd-gesteuerten Aufgaben &#8211; diese k\u00f6nnen unter anderem schon w\u00e4hrend des Starts des [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":763,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[17],"tags":[15],"class_list":["post-805","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-system","tag-system"],"_links":{"self":[{"href":"https:\/\/linux-bibel.at\/index.php\/wp-json\/wp\/v2\/posts\/805","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/linux-bibel.at\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/linux-bibel.at\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/linux-bibel.at\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/linux-bibel.at\/index.php\/wp-json\/wp\/v2\/comments?post=805"}],"version-history":[{"count":1,"href":"https:\/\/linux-bibel.at\/index.php\/wp-json\/wp\/v2\/posts\/805\/revisions"}],"predecessor-version":[{"id":806,"href":"https:\/\/linux-bibel.at\/index.php\/wp-json\/wp\/v2\/posts\/805\/revisions\/806"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/linux-bibel.at\/index.php\/wp-json\/wp\/v2\/media\/763"}],"wp:attachment":[{"href":"https:\/\/linux-bibel.at\/index.php\/wp-json\/wp\/v2\/media?parent=805"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/linux-bibel.at\/index.php\/wp-json\/wp\/v2\/categories?post=805"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/linux-bibel.at\/index.php\/wp-json\/wp\/v2\/tags?post=805"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}