Définir le CHEMIN pour une unité systemd

13

Comment définir le CHEMIN pour les shells sans connexion dans CentOS 7?

Plus précisément, j'ai une unité systemd qui a besoin de binaires /usr/local/texlive/2016/bin/x86_64-linux.

J'ai essayé de l'installer /etc/environmentavec PATH=/usr/local/texlive/2016/bin/x86_64-linux:$PATHmais mon PATH l'a été /usr/local/texlive/2016/bin/x86_64-linux:$PATH:/usr/local/sbin:/usr/sbin.

J'ai créé /etc/profile.d/texlive.shavec export PATH="/usr/local/texlive/2016/bin/x86_64-linux:${PATH}"mais cela ne fonctionnait que pour les shells de connexion.

J'ai regardé Définir le chemin pour tous les utilisateurs (shells connectés et non connectés) mais la solution a déjà été tentée ci-dessus.

J'ai regardé Comment ajouter un chemin d'accès au système $ PATH pour le shell non connecté et le shell de connexion de tous les utilisateurs sur Debian, mais il n'y a pas de solution acceptée et je ne suis pas sûr de vouloir le modifier /etc/login.defscar il pourrait être changé dans une mise à jour.

Agrajag9
la source

Réponses:

17

La réponse la plus simple est de définir le PATHdans le cadre de votre ExecStartcommande dans le fichier Unit systemd. Par exemple, si vous avez actuellement

ExecStart=/bin/mycmd arg1 arg2

puis changez-le en

ExecStart=/bin/bash -c 'PATH=/new/path:$PATH exec /bin/mycmd arg1 arg2'

L'extension de $PATHsera effectuée par bash, pas par systemd. Des alternatives telles que l'utilisation Environment=PATH=/new/path:$PATHne fonctionneront pas car systemd ne développera pas le $PATH.

meuh
la source
Si j'encapsule la commande de cette façon ET que j'utilise le fichier profile.d (je veux que le chemin soit également ajouté pour les shells de connexion), aurais-je encore besoin de définir le chemin dans ExecStart? Ou cela lira-t-il dans profile.d?
Agrajag9
Je pense que vous devrez toujours définir le CHEMIN dans l'ExecStart. Le bash ne lira probablement depuis profile.d que s'il s'agit d'un shell de connexion. Vous pouvez essayer d'ajouter --loginavant le -cpour forcer cela au lieu de définir le CHEMIN, mais vous ferez exécuter bash beaucoup de configuration qui pourraient ne pas fonctionner correctement dans l'environnement système nu et vous donneront des erreurs dans le journal de journal.
meuh