GNU/Linux >> Znalost Linux >  >> Linux

systemd - Dávám mé službě více argumentů

Ano můžeš! Definujte je někde v souboru a přidejte je do EnvironmentFile ve vaší systémové službě. Řekněme například, že obsah /etc/.progconf je:

ARG1=-o
ARG2=--verbose

A váš soubor .service:

EnvironmentFile=/etc/.progconf
ExecStart = /usr/bin/prog $ARG1 $ARG2

Do tohoto souboru můžete zapisovat, pokud je potřebujete změnit na cestách. Služba by neměla měnit své možnosti příliš často, možná zvažte automatické spouštění nebo cron, pokud toho potřebujete dosáhnout.

Další příklady najdete na:https://wiki.archlinux.org/index.php/Systemd/Services


Chtěl jsem udělat to samé, ale bez samostatného souboru pro každou kombinaci argumentů. Zjistil jsem, že mohu předat jeden dlouhý argument s mezerami a poté použít funkci dělení prostoru proměnnou prostředí systemd k oddělení argumentů.

Vytvořil jsem službu s názvem [email protected] (všimněte si koncového „zavináče“, který je vyžadován, když služba přijímá argumenty ).

[Unit]
Description=Test passing multiple arguments

[Service]
Environment="SCRIPT_ARGS=%I"
ExecStart=/tmp/test.py $SCRIPT_ARGS

Spouštím to s sudo systemctl start [email protected]"arg1 arg2 arg3".service a projde arg1 , arg2 a arg3 jako samostatné argumenty příkazového řádku pro test.py.


Nejjednodušší, co jsem našel, je:

ExecStart=/bin/bash -c "\"/path/with spaces/to/app\" arg1 arg2 arg3 \"arg with space\""

Udržuje to vše v sobě.

Když jsem to řekl, zjistil jsem, že alespoň na Ubuntu 18.04 LTS to ani nemusím dělat, mohu to udělat a funguje to dobře:

ExecStart="/path/with spaces/to/app" arg1 arg2 arg3 "arg with space"

$vars pracovat jako argumenty také s tímto vzorem.


Linux
  1. Spravujte více instancí služeb pomocí systemctl

  2. Jak vytvořit službu Systemd v Linuxu

  3. Služba Systemd nespustí Nodejs?

  1. Jak přesměrovat výstup služby systemd do souboru

  2. @reboot nefunguje v CRON

  3. Jak zastavit službu systemd

  1. Systemd s více execStart

  2. přesměrovat protokoly služeb systemd do souboru

  3. aktivace soketu systemd vs xinetd