Como definir variáveis de ambiente globais na inicialização por meio de um script e disponibilizá-las para um aplicativo que é executado antes do login?

14

Eu tenho um serviço que é executado na inicialização e, nesse serviço, ele chama um script bash em segundo plano que exporta algumas variáveis de ambiente. O problema que estou tendo é que essas variáveis de ambiente não estão sendo enviadas para o pai do processo de plano de fundo para que assim que meu script é feito em execução, eles sumiram.

Além disso, depois que o script é executado, o serviço chama outro script que inicia um aplicativo que eu tenho. Este aplicativo precisa de acesso a essas variáveis de ambiente.

O sistema RHEL em que o executo nunca deve ser acessado pelo usuário, ele apenas inicializa e inicia o aplicativo. Eu sei que as variáveis de ambiente para um processo / shell pai não podem realmente ser definidas por um shell de processo de plano de fundo filho.

Eu preciso de uma maneira de fazer isso através de um script que é chamado pelo meu serviço (não necessariamente em segundo plano), não adicionando-os no meu serviço (que não funcionou para mim) e não armazenando-os em um /etc/environment ou .profile ou algo assim.

No meu serviço, tentei adicionar as variáveis de ambiente (não o que eu quero fazer):

    export TEST=192.168.1.1

Eu também tentei isso no meu serviço:

    TEST=192.168.1.1
    export TEST=${TEST}

Eu tentei alterar o modo como meu serviço chama o script bash:

    /bin/asdf/script &

Eu também tentei fazer o sourcing do script para que ele seja executado no mesmo shell (obtido de this ):

    . ./bin/asdf/script
    #I'm very confused why this didn't work

Também encontrei este que parecia interessante, mas não deu muito certo no meu caso.

    
por sqenixs 06.12.2011 / 03:15

2 respostas

11

Você pode tentar colocar um script para reunir as variáveis em /etc/profile.d/

Exemplo:

/etc/profile.d/somescript.sh

#!/bin/bash
TEST=$(cat /var/somefile)
export $TEST

/etc/profile faz uma chamada que executará qualquer script em /etc/profile.d/ , e isso se aplica a todos os usuários no sistema, incluindo o root.

    
por 07.12.2011 / 00:27
1

Não há como um processo influenciar o ambiente de outro processo existente. Os processos influenciam apenas o ambiente de seus processos filhos.

Portanto, você precisa definir essas variáveis de ambiente em um ancestral do aplicativo que precisa delas. Em vez de fazer com que seu serviço invoque separadamente o script bash de configuração de ambiente e o aplicativo, peça a seu serviço que chame um script bash que defina as variáveis de ambiente e, em seguida, ative o aplicativo.

#!/bin/bash
. /path/to/environment/variable/setter.bash
exec /path/to/application
    
por 06.12.2011 / 03:32