web-dev-qa-db-fra.com

systemd - Donner à mon service plusieurs arguments

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!

43
peperunas

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

30
platforma

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.

11
nonagon