Login
Newsletter
Werbung

Thema: Systemd Timer Units für zeitgesteuerte Aufgaben verwenden

10 Kommentar(e) || Alle anzeigen ||  RSS || Kommentieren
Kommentare von Lesern spiegeln nicht unbedingt die Meinung der Redaktion wider.
5
Von coNP am Do, 27. Februar 2020 um 15:14 #

Schöner Artikel für diejenigen, welche noch nie etwas von systemd.timer Units gehört haben.
Die Beispiele sind allerdings so la-la.
Z.B. braucht man für rsync -aP /home/ /mnt/usb/ kein eigenes Skript, sondern kann es direkt als ExecStart=/usr/bin/rsync -aP /home/ /mnt/usb/ eintragen. Dann spart man sich den Shell-Prozess.
Außerdem ist es im Beispiel womöglich sinnvoll, dem Unit ein ConditionPathIsMountPoint=/mnt/usb hinzuzufügen.
Zudem ist die Zeile Unit=my-rsync.service im Timer Unit überflüssig, da das zu aktivierende Unit standardmäßig der Service mit dem gleichen Namen wie der Timer ist.

1
Von Potz Blitz am Do, 27. Februar 2020 um 15:58 #

Zunächst einmal herzlichen Dank für den informativen Artikel.

Ich verwende derzeit für einige zeitgesteuerte Tasks den at-Dämon. An diesem stört mich allerdings, dass die Persistenz nicht wie bei Systemd einstellbar ist. Meine Tasks werden zu falschen Zeiten gestartet, wenn der Rechner zur vorgesehenen Zeit ausgeschaltet war.

Meine Tasks sind generell nur für die einmalige Ausführung bestimmt. Somit frage ich mich: Kann man auch Systemd Timer Units anlegen, die nur einmalig ausgeführt werden? Ich vermute, man könnte zur einmaligen Ausführung z.B. die Wildcards im OnCalendar Parameter weglassen. Also z.B. OnCalendar=2020-02-26 16:00:00. Würden solche Timer Units nach Ausführung automatisch deaktiviert oder gelöscht?

  • 1
    Von coNP am Do, 27. Februar 2020 um 16:05 #

    Dein Ansatz mit OnCalendar und einem festen Datum ist korrekt. Gelöscht werden die Units danach aber nicht automatisch.
    Dies könntest du allerdings in einem ExecStopPost Statement des zugehörigen Service Units erledigen.

    1
    Von Tamaskan am Do, 27. Februar 2020 um 16:08 #

    Dafür könntest du den Befehl systemd-run mit der Option --on-calendar= verwenden, um eine sogenannte "transient unit" zu erzeugen, die nach erfolgter Ausführung wieder verschwindet.

    • 1
      Von Potz Blitz am Fr, 28. Februar 2020 um 15:57 #

      Die transienten Timer-Units gefallen mir sehr gut, da sie offenbar automatisch entsorgt werden, sobald der Job ausgeführt wurde. Leider habe ich festgestellt, dass die mit system-run erstellten Units einen Reboot des Rechners nicht überstehen.

      Das allerdings wäre in meinem Fall wünschenswert. Trotzdem danke für die Anregung.

      • 0
        Von schmidicom am Fr, 28. Februar 2020 um 16:23 #

        Du könntest natürlich auch ein Timer-Unit als Datei erstellen (wie im Artikel beschrieben) und dann mit der OnCalendar-Option ein festes Datum spezifizieren. Diese Option kann auch mehrmals untereinander angegeben werden, wie eine Liste.

        Zum Beispiel so:
        OnCalendar=2020-03-05 05:40
        OnCalendar=2020-03-13 07:43
        OnCalendar=2020-03-20 10:20

        So wird das Timer-Unit nur zu diesen drei Zeitpunkten ausgeführt und dann nie wieder.

        Doku dazu unter: https://www.freedesktop.org/software/systemd/man/systemd.timer.html#OnCalendar=

        Dieser Beitrag wurde 1 mal editiert. Zuletzt am 28. Feb 2020 um 16:27.
        • 1
          Von Potz Blitz am Fr, 28. Februar 2020 um 18:10 #

          Den OnCalendar Parameter mehrfach zu verwenden, ist auch eine interessante Option. Ich habe für meinen Fall der mittels systemd-run angelegten Units festgestellt, dass diese als run-###.timer, run-###.service Dateipaar im Verzeichnis "/run/systemd/transient/" angelegt werden. (Weil das /run/-Verzeichnis ist als tmpfs gemountet ist, übersteht die Unit wahrscheinlich den Reboot nicht.)

          Ich habe ferner herausgefunden, dass nach dem OnCalendar Parameter die Option RemainAfterElapse=no verwendet wird. Vermutlich ist das die Option, die Systemd dazu veranlasst, die Unit nach der einmaligen Ausführung "abzuräumen". Das habe ich allerdings noch nicht ausprobiert.

    2
    Von Ach je ... am Do, 27. Februar 2020 um 16:27 #

    Ergänzend noch dazu: es gibt wirklich sehr viele verschiedene Möglichkeiten Zeitpunkte zu definieren.
    Nur mal als Anregung: was mag wohl Type=oneshot (in der ~.service im Abschnitt [Service]) wohl für eine Wirkung haben?
    Es lohnt sich für den Interessierten, hier mal eine Suchmaschine zu bemühen und sich Beispiele anzusehen.

    Übrigens könnten solch Units auch woanders liegen z. B. in /usr/lib/systemd/system/
    Und vielleicht hat manch einer solche Units in Betrieb, ohne es zu ahnen, weil von der Distribution eingerichtet. Das Kommando
    systemctl list-timers --all
    wird dann zeigen, was da wann läuft und wann wieder etc. pp.

Pro-Linux
Pro-Linux @Twitter
Neue Nachrichten
Werbung