[lug-ld] systemd specifier namenskollision
Ekki Plicht
ekki at plicht.de
Di Aug 13 15:27:14 CEST 2024
Moin.
In einer systemd-unit gibt es eine Reihe von specifier wie "%Y", "%D"
usw. Diese specifier werden bei Start der unit 'übersetzt', %Y ist dann
das Fragment des Pfades, %D ist das shared data directory usw.
Nun möchte ich ein Programm (arecord) nutzen, das ebenfalls solche
Platzhalter verwendet, aber mit völlig anderer Bedeutung. Da ist %Y das
Jahr, $D der Tag usw, halt das was strfprint() daraus macht.
Ihr könnt euch vielleicht die Überraschung vorstellen, als aus dem
Dateinamen-Muster
arecord --use-strftime rec_%y-%m%d_%H-%M-%S.wav
etwas völlig anderes wurde, nämlich
rec_/home/ekki/.config/systemd/user-0117b5c45a984b588cca50c3f1e577cd-/run/user/1000/credentials/rec60min.service_grappa--/home/ekki/.local/state.wav'
Weil systemd als erstes drankommt, diese Specifier zu interpretieren,
dann erst das aufgerufene Programm.
Meine Frage ist also - wie kriege ich es durch Quoting hin, das systemd
da die Finger von lässt und das Programm machen darf was es will?
'' nur um den Dateinamen rum bringt nix, "" dito
'' um den ganzen Kommandoaufruf bringt nix, "" dito
Die ExecStart Zeile in der systemd-Unit sieht wie folgt aus:
ExecStart=/usr/bin/arecord -D front:CARD=IC-705,DEV=0 -f S16_LE -r 48000
-d 60 --use-strftime rec_%Y-%m-%d_%H-%M-%S.wav
Danke,
Ekki
Mehr Informationen über die Mailingliste lug-ld