Definir PATH para uma unidade systemd

13

Como alguém define o PATH para shells sem login no CentOS 7?

Especificamente, eu tenho uma unidade systemd que precisa de binários /usr/local/texlive/2016/bin/x86_64-linux.

Tentei colocá-lo em /etc/environmentcom PATH=/usr/local/texlive/2016/bin/x86_64-linux:$PATHmas depois o meu caminho era /usr/local/texlive/2016/bin/x86_64-linux:$PATH:/usr/local/sbin:/usr/sbin.

Eu criei /etc/profile.d/texlive.shcom, export PATH="/usr/local/texlive/2016/bin/x86_64-linux:${PATH}"mas isso só funcionou para shells de login.

Eu olhei para Definir caminho para todos os usuários (shells de logon e não logon), mas a solução já foi tentada acima.

Eu olhei para Como adicionar um caminho ao sistema $ PATH para o shell de todos os usuários que não são de login e o shell de login no debian, mas não há solução aceita e não tenho certeza se quero modificar, /etc/login.defspois pode ser alterado em uma atualização.

Agrajag9
fonte

Respostas:

17

A resposta mais simples é definir PATHcomo parte do seu ExecStartcomando no arquivo da unidade systemd. Por exemplo, se você possui atualmente

ExecStart=/bin/mycmd arg1 arg2

então mude para

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

A expansão do $PATHserá feita pelo bash, não pelo systemd. Alternativas como o uso Environment=PATH=/new/path:$PATHnão funcionarão, pois o systemd não expandirá o arquivo $PATH.

meuh
fonte
Se eu envolver o comando dessa maneira E usar o arquivo profile.d (também quero o caminho para os shells de login), ainda precisarei definir o caminho no ExecStart? Ou isso será lido no profile.d?
Agrajag9
Eu acho que você ainda precisará definir o PATH no ExecStart. O bash provavelmente só lerá do profile.d se for um shell de login. Você pode tentar adicionar --loginantes -cde forçar isso em vez de definir o PATH, mas você fará com que o bash execute muitas configurações que podem não funcionar bem no ambiente systemd simples e com erros no log do diário.
meuh 27/02