[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