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.