it-swarm.com.de

systemd - Ich gebe meinem Dienst mehrere Argumente

Kann ich meinem systemd-Dienst mehr als ein Argument geben?

Ich möchte ein Programm mit mehreren Argumenten ausführen, über die der Endbenutzer entscheiden muss.

Zum Beispiel: ./program arg1 arg2

Um eine App mit einem einzigen Argument zu starten, benötige ich etwas wie systemctl start [email protected], wobei ich in der Service-Definition ExecStart = /usr/bin/program ℅i habe.

Vielen Dank!

43
peperunas

Ja, du kannst! Definieren Sie sie irgendwo in einer Datei und fügen Sie sie zu EnvironmentFile in Ihrem systemd Service hinzu. 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 Service sollte seine Optionen nicht sehr oft ändern. Vielleicht sollten Sie einen Autostart oder einen Cron in Betracht ziehen, wenn Sie dies benötigen.

Weitere Beispiele finden Sie unter: https://wiki.archlinux.org/index.php/Systemd/Services

30
platforma

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 zur Aufteilung 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 sign', das erforderlich ist, wenn ein Dienst Argumente akzeptiert ).

[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 übergibt arg1, arg2 und arg3 als separate Befehlszeilenargumente an test.py.

13
nonagon