Est-il possible de donner à mon service systemd plus d'un argument?
Je voudrais exécuter un programme avec plusieurs arguments qui doivent être décidés par l'utilisateur final.
Par exemple: ./program arg1 arg2
Pour démarrer une application à un seul argument, il me faudrait quelque chose du type systemctl start arg1@program
où figure la définition du service ExecStart = /usr/bin/program ℅i
.
Merci!
Réponses:
Oui, vous pouvez! Définissez-les dans un fichier quelque part et ajoutez-les à
EnvironmentFile
votre service systemd. Par exemple, supposons que le contenu de /etc/.progconf soit:Et votre fichier .service:
Vous pouvez écrire dans ce fichier si vous devez les modifier en tout temps. Un service ne devrait pas changer très souvent ses options, peut-être envisager 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
la source
VAR1=... VAR2=... systemctl start foobar.service
de les transmettre?PassEnvironment
directive, mais elle prend des variables dusystemd
processus (normalement le PID 1), pas desystemctl
. Les variables d'environnement dusystemctl
processus ne sont pas propagées au service en cours de démarrage.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 fonctionnalité de division d'espace variable d'environnement de Systemd pour séparer les arguments.
J'ai rendu un service avec le nom de fichier
[email protected]
( notez le signe 'au signe' qui est requis lorsqu'un service prend des arguments ).Je lance ceci avec
sudo systemctl start argtest@"arg1 arg2 arg3".service
et il passearg1
,arg2
etarg3
comme arguments de ligne de commande séparés à test.py.la source
Wants=argtest@"arg1 arg2".service
et seul le premier argument a été passé.Le plus facile que j'ai trouvé est:
Garde le tout autonome.
Cela dit, j'ai constaté qu'au moins sur Ubuntu 18.04 LTS, je n'ai même pas besoin de le faire, je peux le faire et cela fonctionne bien:
$vars
travailler comme arguments avec ce motif aussi.la source