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.
E.g: ./program arg1 arg2
Pour démarrer une application à un seul argument, il me faudrait quelque chose comme systemctl start arg1@program
, où, dans la définition du service, j'ai ExecStart = /usr/bin/program ℅i
.
Merci!
Oui, vous pouvez! Définissez-les dans un fichier quelque part et ajoutez-les à EnvironmentFile
dans votre service systemd. Par exemple, supposons que le contenu de /etc/.progconf soit:
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 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 de réaliser cela.
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 fonctionnalité de division d'espace variable d'environnement de Systemd pour séparer les arguments.
J'ai créé un service avec le nom de fichier [email protected]
( notez le signe 'à la fin' qui est requis lorsqu'un service accepte les arguments ).
[Unit]
Description=Test passing multiple arguments
[Service]
Environment="SCRIPT_ARGS=%I"
ExecStart=/tmp/test.py $SCRIPT_ARGS
J'exécute ceci avec Sudo systemctl start argtest@"arg1 arg2 arg3".service
et il transmet arg1
, arg2
et arg3
en tant qu'arguments de ligne de commande distincts à test.py.