Impostare PATH per un'unità systemd


13

Come si imposta il PERCORSO per le shell senza login in CentOS 7?

In particolare, ho un'unità systemd che richiede binari /usr/local/texlive/2016/bin/x86_64-linux.

Ho provato a sistemarlo /etc/environmentcon PATH=/usr/local/texlive/2016/bin/x86_64-linux:$PATHma poi il mio PERCORSO era /usr/local/texlive/2016/bin/x86_64-linux:$PATH:/usr/local/sbin:/usr/sbin.

Ho creato /etc/profile.d/texlive.shcon, export PATH="/usr/local/texlive/2016/bin/x86_64-linux:${PATH}"ma ha funzionato solo per le shell di accesso.

Ho esaminato Imposta percorso per tutti gli utenti (shell di accesso e non di accesso) ma la soluzione era già stata tentata sopra.

Ho visto Come aggiungere un percorso al sistema $ PATH per la shell di tutti gli utenti e la shell di accesso su debian ma non esiste una soluzione accettata e non sono sicuro di voler modificare /etc/login.defsperché potrebbe essere cambiato in un aggiornamento.

Risposte:


17

La risposta più semplice è impostare PATHcome parte del tuo ExecStartcomando nel file di unità systemd. Ad esempio, se attualmente lo hai

ExecStart=/bin/mycmd arg1 arg2

quindi cambiarlo in

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

L'espansione di $PATHsarà eseguita da bash, non da systemd. Alternative come l'utilizzo Environment=PATH=/new/path:$PATHnon funzioneranno poiché systemd non espanderà il file $PATH.


Se avvolgo il comando in questo modo E utilizzo il file profile.d (voglio aggiungere il percorso anche per le shell di login), dovrei comunque impostare il percorso in ExecStart? O leggerà dal profilo.d?
Agrajag9,

Penso che dovrai ancora impostare il PERCORSO in ExecStart. Probabilmente bash leggerà solo da profile.d se si tratta di una shell di login. Potresti provare ad aggiungere --loginprima -cdi forzare questo invece di impostare il PERCORSO, ma eseguirai bash eseguendo molte impostazioni che potrebbero non funzionare bene nell'ambiente di sistema nudo e ti daranno errori nel registro del journal.
Meuh
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.