Linux Tipps & Tricks
Systemd Timer erstellen für User¶
Um täglich, 12-stündlich, wöchentlich etc. ein .sh Skript aufzurufen kann man sich Systemd zu Nutze machen.
Hierzu braucht man eine Timer-Datei .timer und eine Service-Datei .service.
Beispiel für eine .service Datei¶
[Unit]
Description=Startet mein Shell-Skript
[Service]
Type=oneshot
ExecStart=/pfad/zu/deinem/skript.sh
ACHTUNG! Möchte man das Benutzer Heim-Verzeichnis nutzen schreibt man
%h, $HOME bzw ~ funktionieren nicht!
Beispiel für eine .timer Datei¶
[Unit]
Description=Timer fuer mein Shell-Skript
[Timer]
# Waehle eines der Beispiele unten fuer OnCalendar:
OnCalendar=Mon *-*-* 14:30:00
# Verpasste Ausfuehrungen (z. B. wenn der PC aus war) nach dem Start nachholen
Persistent=true
[Install]
WantedBy=timers.target
Beispiele für OnCalendar=¶
-
Alle 12 Stunden (um 00:00 und 12:00 Uhr):
OnCalendar=00/12:00:00 -
Alle 3 Tage (z. B. jeweils um 03:00 Uhr morgens):
OnCalendar=*-*-1/3 03:00:00(läuft am 1., 4., 7., ... Tag des Monats) -
1x die Woche an einem bestimmten Tag/Uhrzeit (z. B. jeden Montag um 14:30 Uhr):
OnCalendar=Mon *-*-* 14:30:00 -
Täglich um 9 und 18 Uhr:
OnCalendar=*-*-* 09,18:00:00
oder lesbarer:
OnCalendar=09:00:00
OnCalendar=18:00:00
Hat man diese beiden Dateien (Service- und Timer-Datei) in ~/.config/systemd/user erstellt, wird die Konfiguration neu geladen:
systemctl --user daemon-reload
Dann den Timer aktivieren und sofort starten:
systemctl --user enable --now mein-skript.timer
Weitere Befehle¶
Aktive Timer und nächste Ausführungszeiten anzeigen:
systemctl --user list-timers
Status des Timers prüfen:
systemctl --user status mein-skript.timer
Skript manuell ausführen bzw. Timer manuell triggern:
systemctl --user start mein-skript.service
Zeit-Syntax vorab prüfen (wann der nächste Lauf wäre):
systemd-analyze calendar "Mon *-*-* 14:30:00"
Tipp: Damit der User-Timer auch nach dem Abmelden weiterläuft (z. B. auf einem Server), muss für deinen Benutzer einmalig das Linger-Feature aktiviert werden: loginctl enable-linger $USER. War/ist bei mir schon aktiviert.
Einen Befehl mit Parametern für alle *.EXT ausführen¶
for f in *.ext; do <Befehl> --option -o "$f"; done
Ein Skript in Dolphin integrieren¶
Für .mds und .iso Dateien habe ich ein Konvertierungsskript in .bin/.cue geschrieben. Diese Skript möchte ich nun für besagte Dateien in Dolphin integrieren.
Falls noch nicht vorhanden das Verzeichnis dazu erstellen:
mkdir -p ~/.local/share/kio/servicemenus
Desktop-Datei für Dolphin anlegen¶
~/.local/share/kio/servicemenus/convert_mdsiso_to_bincue.desktop:
[Desktop Entry]
Type=Service
ServiceTypes=KonqPopupMenu/Plugin
MimeType=application/x-cd-image;application/x-iso9001-image;application/x-mds;application/octet-stream;
Actions=convertToBinCue;
X-KDE-Submenu=Konvertieren
[Desktop Action convertToBinCue]
Name=MDS/ISO in .bin / .cue umwandeln (PicoGUS)
Icon=media-optical
Exec=konsole -e bash -c '"$HOME/bin/conv_mdsiso_to_bincue.sh" "$1"' _ "%f"
Hier noch ein verfeinertes Beispiel bald™ einfügen :p