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.