Oui, vous pouvez! Définissez-les dans un fichier quelque part et ajoutez-les à EnvironmentFile
dans votre service systemd. Par exemple, disons que le contenu de /etc/.progconf est :
ARG1=-o
ARG2=--verbose
Et votre fichier .service :
EnvironmentFile=/etc/.progconf
ExecStart = /usr/bin/prog $ARG1 $ARG2
Vous pouvez écrire dans ce fichier si vous avez besoin de les modifier lors de vos déplacements. Un service ne devrait pas changer ses options très souvent, envisagez peut-être le démarrage automatique ou cron si vous avez besoin d'y parvenir.
Pour plus d'exemples, consultez :https://wiki.archlinux.org/index.php/Systemd/Services
Je voulais faire la même chose, mais sans fichier séparé pour chaque combinaison d'arguments. J'ai découvert que je pouvais passer un long argument avec des espaces, puis utiliser la fonction de fractionnement de l'espace des variables d'environnement de systemd pour séparer les arguments.
J'ai créé un service avec le nom de fichier [email protected]
(notez le 'arobase' qui est requis lorsqu'un service prend des arguments ).
[Unit]
Description=Test passing multiple arguments
[Service]
Environment="SCRIPT_ARGS=%I"
ExecStart=/tmp/test.py $SCRIPT_ARGS
Je lance ceci avec sudo systemctl start [email protected]"arg1 arg2 arg3".service
et il passe arg1
, arg2
et arg3
en tant qu'arguments de ligne de commande séparés pour test.py.
Le plus simple que j'ai trouvé est :
ExecStart=/bin/bash -c "\"/path/with spaces/to/app\" arg1 arg2 arg3 \"arg with space\""
Tout est autonome.
Cela dit, j'ai trouvé qu'au moins sur Ubuntu 18.04 LTS, je n'ai même pas besoin de faire ça, je peux le faire et ça marche bien :
ExecStart="/path/with spaces/to/app" arg1 arg2 arg3 "arg with space"
$vars
fonctionnent également comme arguments avec ce modèle.