Disponibilizando variáveis de ambiente para processos downstream iniciados em um script init.d

6

Essas perguntas derivam de @FrustratedWithFormsDesigner comentário .

Como faço para que as variáveis de ambiente export definidas em um script init.d estejam disponíveis para processos de recebimento de dados iniciados dentro do mesmo script init.d?

Mais detalhadamente, estou em uma instância do Amazon EC2 e usando um script init.d para controlar meu servidor node .js que, por sua vez, é controlado por nodemon , que monitora alterações de arquivos e reinicia node como necessário. Então, resumindo, meu script init.d inicia nodemon , que então inicia node . As variáveis de ambiente definidas com export no script init.d parecem estar disponíveis para nodemon , mas não estão disponíveis para node . Como eu disponibilizo essas variáveis de ambiente para node ?

Atualmente, apenas o init.d está disponível na minha instância do Amazon EC2, portanto, isso é possível com scripts init.d e, caso contrário, isso é possível com o upstart ou, de preferência, com o systemd?

    
por Marc A 05.06.2016 / 06:02

2 respostas

5

Eu recomendo mudar para uma distribuição Linux baseada em systemd, como o Fedora ou o Ubuntu 16.04. systemd pode facilmente passar variáveis de ambiente para o seu processo E ele pode manipular automaticamente o processo de reinicialização, bem como iniciá-lo na inicialização. O log também é bem tratado pelo journald do systemd. Também não há a sobrecarga de instalar ou executar qualquer outra coisa, já que o systemd faz parte da distribuição do SO.

Aqui está um exemplo de configuração de duas variáveis de ambiente de ambiente com systemd em um arquivo de unidade:

Environment="ONE=one" 'TWO=two two'

Os documentos completos são aqui .

Seu problema foi parcialmente de complexidade, já que tanto o sistema init quanto o gerenciador de processos manipulavam variáveis de ambiente passantes. Com o systemd como o sistema init e o gerenciador de processos, uma camada de complexidade é removida.

    
por 21.06.2016 / 19:11
5

Além de usar a diretiva Environment no próprio serviço systemd, como sugerido em esta resposta , outra opção é a Diretiva EnvironmentFile.

Por favor, note que não sou especialista nesta área (obviamente, eu sou o autor desta questão); Eu estou apenas resumindo, da melhor forma possível, o Wiki do Fedora . Sinta-se à vontade para editar / corrigir-me.

Diretiva EnvironmentFile

Crie um arquivo contendo novas atribuições de variáveis separadas por linha:

# myservice.env
ENV1=value1
ENV2=value2

Em seguida, no arquivo da unidade de serviço, use a diretiva EnvironmentFile:

[Service]
...
EnvironmentFile=-/path/to/myservice.env
...

Dentro do seu arquivo de unidade, use ${ENV1} e $ENV1 para se referir às variáveis definidas dentro de myservice.env .

O "-" na linha EnvironmentFile= garante que nenhuma mensagem de erro seja gerada se o arquivo do ambiente não existir.

    
por 28.06.2016 / 15:39