µMIC.200 – Programme automatisch starten

Das Linux Betriebssystem auf der Steuerung µMIC.200 verwendet systemd für das Starten, Überwachen und Beenden von Prozessen. Das Starten von Programmen zu bestimmten Zeiten (z.B. um Mitternacht) – klassisch eine Ausgabe von cron – wird von sogenannten Timer Units übernommen. In einer Timer Unit wird definiert wann eine Service Unit gestartet wird. Eigene Timer/Service Units legt man im Verzeichnis /etc/systemd/system an, hierzu benötigt man Root Rechte.

Die beiden folgenden Konfigurationsdateien können als Vorlage genutzt werden um eigene Timer bzw. Start-Scripte zu entwickeln. In dem Beispiel wird das blinky Programm auf der Steuerung 30 Sekunden nach dem Booten gestartet und danach zyklisch im 2 Minuten Takt.

# blinky.timer
[Unit]
Description=Eine kurze Beschreibung des Timers

[Timer]
OnBootSec=30sec
OnUnitActiveSec=2min
Unit=blinky.service

[Install]
WantedBy=multi-user.target

Datei blinky.timer

In der blinky.timer Datei (welche die Endung .timer haben muss) gibt es drei Sektionen, welche durch die Schlüsselworte Unit, Timer und Install gekennzeichnet sind. Durch den Eintrag OnBootSec wird festgelegt welche Zeit nach dem Booten vergehen muss um den Befehl auszuführen. Der Eintrag OnUnitActiveSec definiert wann die Service Unit nach dem letzten Starten nochmals ausgeführt werden soll. Wenn die Service Unit nur einmal ausgeführt werden soll wird der Eintrag OnUnitActiveSec einfach weggelassen. Die folgende Liste gibt eine Übersicht der möglichen Schlüsselworte in der Timer Sektion.

Schlüssel Erläuterung
OnActiveSec relative Zeit bezogen auf den Zeitpunkt, als die Timer Unit zuletzt aktiviert wurde
OnBootSec relative Zeit bezogen auf den Zeitpunkt, als der Rechner gestartet wurde
OnStartupSec relative Zeit bezogen auf den Zeitpunkt, als systemd gestartet wurde
OnUnitActiveSec relative Zeit bezogen auf den Zeitpunkt, als die Service Unit zuletzt aktiviert wurde
OnUnitInactiveSec relative Zeit bezogen auf den Zeitpunkt, als die Service Unit zuletzt deaktiviert wurde
OnCalendar absolute Zeit

Für absolute Zeitangaben sieht systemd eine komplexe Syntax vor, die man mit dem Befehl man systemd.time im Abschnitt Calendar Events nachlesen kann. So bewirkt OnCalendar=Mon 2017-*-* 17:30 beispielsweise, dass ein Job an jedem Montag des Jahres 2017 um 17:30 ausgeführt wird.

Zu der *.timer Datei gehört die folgende *.service Datei (die Referenz auf die Datei ist durch den Schlüssel Unit in dem Timer Service definiert.

# blinky.service
[Unit]
Description=Blinky Beispiel ausführen

[Service]
Type=oneshot
ExecStart=/home/umic/Examples/blinky/umic_blinky

Datei blinky.service

Der Schlüssel ExecStart definiert welches Programm ausgeführt werden soll, in unserem Beispiel ist es das Programm umic_blinky.

Timer aktivieren

Der neue Timer wird durch systemctl start erstmalig gestartet und durch systemctl enable dauerhaft (also über den nächsten Neustart hinweg) aktiviert.

systemctl start blinky.timer
systemctl enable blinky.timer

Um den Timer zu beenden und zu deaktivieren führen Sie die folgenden Befehle aus:

systemctl stop blinky.timer
systemctl disable blinky.timer

Damit Änderungen in bereits aktiven Timern wirksam werden, führen Sie das folgende Kommando aus:

systemctl reenable –now blinky.timer

Timer anzeigen

Aktive Timer können über den Befehl systemctl list-timers ausgegeben werden. Möchte man zusätzlich die inaktiven Timer sehen, muss man dem Befehl noch die Option --all hinzufügen.

Referenzen

/1/ Ubuntu Users Wiki: systemd Timer Units
/2/ M. Kofler, systemd-Timer als cron-Alternative

Geschrieben in: Linux, Steuerung


Hinterlasse eine Antwort