Ja, du kannst! Definieren Sie sie irgendwo in einer Datei und fügen Sie sie zu EnvironmentFile
hinzu in Ihrem systemd-Dienst. Angenommen, der Inhalt von /etc/.progconf lautet:
ARG1=-o
ARG2=--verbose
Und Ihre .service-Datei:
EnvironmentFile=/etc/.progconf
ExecStart = /usr/bin/prog $ARG1 $ARG2
Sie können in diese Datei schreiben, wenn Sie sie unterwegs ändern müssen. Ein Dienst sollte seine Optionen nicht sehr oft ändern, ziehen Sie vielleicht Autostart oder Cron in Betracht, wenn Sie dies erreichen müssen.
Weitere Beispiele finden Sie unter:https://wiki.archlinux.org/index.php/Systemd/Services
Ich wollte dasselbe tun, aber ohne eine separate Datei für jede Kombination von Argumenten. Ich fand heraus, dass ich ein langes Argument mit Leerzeichen übergeben und dann die Funktion zum Aufteilen von Leerzeichen der Umgebungsvariablen von systemd verwenden konnte, um die Argumente zu trennen.
Ich habe einen Dienst mit dem Dateinamen [email protected]
erstellt (beachten Sie das abschließende 'at-Zeichen', das erforderlich ist, wenn ein Dienst Argumente entgegennimmt ).
[Unit]
Description=Test passing multiple arguments
[Service]
Environment="SCRIPT_ARGS=%I"
ExecStart=/tmp/test.py $SCRIPT_ARGS
Ich führe dies mit sudo systemctl start [email protected]"arg1 arg2 arg3".service
aus und es passiert arg1
, arg2
und arg3
als separate Befehlszeilenargumente für test.py.
Das einfachste, was ich gefunden habe, ist:
ExecStart=/bin/bash -c "\"/path/with spaces/to/app\" arg1 arg2 arg3 \"arg with space\""
Hält alles in sich abgeschlossen.
Allerdings habe ich festgestellt, dass ich das zumindest unter Ubuntu 18.04 LTS nicht einmal tun muss, ich kann dies tun und es funktioniert gut:
ExecStart="/path/with spaces/to/app" arg1 arg2 arg3 "arg with space"
$vars
funktionieren auch als Argumente mit diesem Muster.