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.
Z.B: ./program arg1 arg2
Um eine App mit einem einzigen Argument zu starten, bräuchte ich so etwas wie systemctl start arg1@program
, wo ich in der Service-Definition habe ExecStart = /usr/bin/program ℅i
.
Vielen Dank!
Antworten:
Ja, du kannst! Definieren Sie sie irgendwo in einer Datei und fügen Sie sie
EnvironmentFile
Ihrem systemd-Dienst hinzu. Angenommen, der Inhalt von /etc/.progconf lautet:Und Ihre .service-Datei:
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
quelle
VAR1=... VAR2=... systemctl start foobar.service
, dass die Variablen übergeben werden sollen?PassEnvironment
Direktive, aber sie nimmt Variablen aus demsystemd
Prozess (normalerweise PID 1) und nicht aussystemctl
. Umgebungsvariablen aus demsystemctl
Prozess werden nicht an den zu startenden Dienst weitergegeben.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 Dateiname erstellt
[email protected]
( beachten Sie das abschließende 'at-Zeichen', das erforderlich ist, wenn ein Dienst Argumente akzeptiert ).Ich betreibe diese mit
sudo systemctl start argtest@"arg1 arg2 arg3".service
und es gehtarg1
,arg2
undarg3
als separate Befehlszeilenargumente zu test.py.quelle
Wants=argtest@"arg1 arg2".service
und nur das erste Argument wurde übergeben.Am einfachsten habe ich gefunden:
Hält alles in sich geschlossen.
Allerdings habe ich festgestellt, dass ich das zumindest auf Ubuntu 18.04 LTS nicht einmal tun muss. Ich kann das und es funktioniert einwandfrei:
$vars
Arbeite auch mit diesem Muster als Argument.quelle