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!
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
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.