Como carregar a variável de ambiente de um arquivo para um trabalho inicial?

2

Estou escrevendo um trabalho inicial para um serviço que é configurado usando variáveis de ambiente e muitas delas (> 20).

A maneira como isso foi tratado até agora era geralmente executá-lo a partir de um ativador Ruby que usava a gem Dotenv de Ruby para carregar o arquivo de configuração. Eu quero substituir o lançador com um arquivo upstart direto (para reduzir a quantidade de código personalizado que preciso manter), mas me deparei com o problema de como configurar todas as variáveis de ambiente necessárias ao serviço.

Minha opinião inicial foi:

script
   . /etc/default/service-conf
   /usr/local/bin/service
end script

mas apenas o sourcing do arquivo não exporta as variáveis, e eu não quero adicionar muitos comandos export ao script, principalmente porque será uma bagunça completamente inatingível e ilegível.

    
por Guss 21.12.2015 / 13:44

1 resposta

6

Existem várias maneiras de lidar com o problema de exportar variáveis definidas em um arquivo de origem, incluindo todos os tipos de hacks (por exemplo, o estranho export $(cat file | xargs) hack documentado nesta resposta ), mas a maneira mais simples de ativar o sinalizador" Marcar variáveis para exportação "em seu shell, antes de obter o arquivo de ambiente.

Aqui está a documentação básica para este recurso - veja em -a .

Enquanto a tag script no upstart não usa o Bash como shell - ele usa a implementação padrão do shell POSIX no Ubuntu, chamada traço que também suporta esse recurso, chamando-o de allexport . Portanto, a seção de script inicial deve ser:

script
  set -a
  . /etc/default/service-conf
  /usr/local/bin/service
end script
    
por Guss 21.12.2015 / 17:28