Ustaw PATH dla jednostki systemowej

13

Jak ustawić PATH dla powłok niezalogowanych w CentOS 7?

W szczególności mam jednostkę systemową, która potrzebuje plików binarnych /usr/local/texlive/2016/bin/x86_64-linux.

Próbowałem ustawić go /etc/environmentz PATH=/usr/local/texlive/2016/bin/x86_64-linux:$PATHale wtedy moja droga była /usr/local/texlive/2016/bin/x86_64-linux:$PATH:/usr/local/sbin:/usr/sbin.

I stworzył /etc/profile.d/texlive.shz export PATH="/usr/local/texlive/2016/bin/x86_64-linux:${PATH}"ale to tylko pracował dla powłok zgłoszeniowych.

Spojrzałem na Ustaw ścieżkę dla wszystkich użytkowników (powłoki logowania i powłoki niezwiązane z logowaniem), ale rozwiązanie już zostało wypróbowane powyżej.

Spojrzałem na Jak dodać ścieżkę do $ PATH do systemu dla powłoki non-login i powłoki logowania wszystkich użytkowników w Debianie, ale nie ma akceptowanego rozwiązania i nie jestem pewien, czy chcę zmodyfikować, /etc/login.defsponieważ może zostać zmieniony w aktualizacji.

Agrajag9
źródło

Odpowiedzi:

17

Najprostszą odpowiedzią jest ustawienie PATHjako części ExecStartpolecenia w systemowym pliku Unit. Na przykład, jeśli obecnie masz

ExecStart=/bin/mycmd arg1 arg2

następnie zmień na

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

Rozbudowa $PATHzostanie wykonana przez bash, a nie systemd. Alternatywy takie jak używanie Environment=PATH=/new/path:$PATHnie będą działać, ponieważ systemd nie rozwinie $PATH.

meuh
źródło
Jeśli owinę polecenie w ten sposób ORAZ użyję pliku profile.d (chcę również dodać ścieżkę do powłok logowania), czy nadal będę musiał ustawić ścieżkę w ExecStart? Czy będzie to czytać z profilu.d?
Agrajag9,
Myślę, że nadal będziesz musiał ustawić ŚCIEŻKĘ w ExecStart. Bash prawdopodobnie będzie czytał tylko z profilu. D, jeśli jest to powłoka logowania. Możesz spróbować dodać --loginprzed, -caby wymusić to zamiast ustalania ŚCIEŻKI, ale będziesz zmuszał basha do uruchomienia wielu ustawień, które mogą nie działać dobrze w czystym środowisku systemowym i powodować błędy w dzienniku dziennika.
Meuh