GNU/Linux >> LINUX-Kenntnisse >  >> Linux

systemd - Gibt meinem Dienst mehrere Argumente

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.


Linux
  1. 10 praktische systemd-Befehle:Eine Referenz

  2. So erstellen Sie einen Systemd-Dienst unter Linux

  3. Grundlegende Systemd-Dienstdateien schreiben?

  4. Systemd-Dienst startet Nodejs nicht?

  5. So leiten Sie die Ausgabe des systemd-Dienstes in eine Datei um

Systemctl-Befehle zum Verwalten des Systemd-Dienstes

Verwenden von systemd-Funktionen zum Sichern von Diensten

Verwalten von cgroups mit systemd

Linux – Speicherort des Fsck-Skripts?

systemd-Dienstprotokolle in eine Datei umleiten

Systemd-Socket-Aktivierung vs. xinetd