Tenha um ambiente de leitura inicial em / etc / environment para um serviço

17

Qual é a melhor maneira de fornecer as variáveis ​​de ambiente definidas em /etc/environmentum serviço inicial ?

Eu acho que simplesmente fornecê-los .em uma seção de script não funciona, porque os scripts são executados pelos shquais seria necessário um adicional exportna frente de todas as definições ...

Nikratio
fonte

Respostas:

16

Finalmente recebi uma resposta no #upstartcanal de IRC. Em algum momento, o iniciante terá suporte adequado ao PAM e, portanto, lerá a /etc/environmentsi próprio. Até então, o truque é executar o comando com su. suusa o PAM e configurará o ambiente adequado. Exemplo:

script 
    exec su root -c /usr/sbin/job_needing_envs
end script
Nikratio
fonte
Obrigado por postar a resposta, você me ajudou exatamente no mesmo problema.
precisa
erro:su: must be run from a terminal
Kuf
3

Eu costumo usar eval $(cat /etc/environment | sed 's/^/export /')

Ele pega cada linha /etc/environment, acrescenta exporte avalia:

script
exec /bin/bash <<'EOT'
  eval $(cat /etc/environment | sed 's/^/export /')
  do_what_you_need_to
EOT
end script
Jrgns
fonte
Por que você usa exec e não apenas coloca a exportação diretamente no bloco de scripts?
Guss
1

Adicione isso ao seu script:

. /etc/environment
export VAR1 VAR2 VAR3

onde as variáveis ​​necessárias são especificadas no lugar dos espaços reservados no estilo "VAR1".

Pausado até novo aviso.
fonte
2
Dessa forma, eu tenho que manter manualmente a configuração arrivista e / etc / ambiente em sincronia, o que é (na minha opinião) não melhor do que a definição das variáveis duas vezes ...
Nikratio
Eu não usaria /etc/environmentpara definir todas as suas variáveis ​​necessárias. Deixe isso como um arquivo estático. No meu sistema, só consegui encontrar alguns scripts que o usassem de qualquer maneira. Crie um arquivo chamado algo como /etc/environment.locale coloque suas variáveis e exportações lá e origine esse arquivo. Então você só tem que manter que um arquivo.
Pausado até novo aviso.
/ etc / environment é lido por pam_env.so (e não por nenhum script), portanto está disponível para qualquer logon. Infelizmente, apenas os programas iniciados pelo iniciante não têm acesso a esse arquivo por padrão.
Nikratio