µ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
Hinterlasse eine Antwort
Du musst angemeldet sein, um einen Kommentar abzugeben.