É possível exportar a variável env para alguns serviços?

2

Dizendo que tenho dois serviços, que são para iniciar dois processos automaticamente enquanto o sistema (Ubuntu 16.04.3) é iniciado.

Um arquivo de serviço:

[Unit]
Description=service 1
Requires=init_mdc.service
After=rc.local.service init_mdc.service


[Service]
ExecStart=someCmd
ExecReload=someCmd
KillMode=process
Restart=on-failure
Type=simple

O outro arquivo de serviço:

[Unit]
Description=service 2
Requires=init_mdc.service
After=rc.local.service init_mdc.service


[Service]
ExecStart=someCmd2
ExecReload=someCmd2
KillMode=process
Restart=on-failure
Type=simple

Os dois serviços precisam de algumas variáveis env.

Por enquanto, minha solução não é boa, porque os someCmd s dos dois serviços são dois scripts bash diferentes, nos quais eu configurei as mesmas variáveis env.

Estou pensando se posso definir algumas variáveis de env em algum lugar de alguma forma para que os dois serviços possam compartilhá-las, em outras palavras, quero definir as variáveis env apenas uma vez, em vez de duas vezes.

Eu tentei exportar essas variáveis de env de /etc/profile , de /etc/rc.local , mas elas não funcionam. Acho que é porque o sistema executa meus dois serviços primeiro e, em seguida, /etc/profile e /etc/rc.local são lidos pelo sistema.

Existe alguma maneira de permitir que eu defina algumas variáveis de env para mais de um arquivo de serviço? Eu sei que podemos definir EnvironmentFile=XXX no arquivo de serviço para importar algumas variáveis env, mas eu não gosto disso porque eu ainda tenho que definir mais de uma vez EnvironmentFile=XXX para cada serviço ...

    
por Yves 02.08.2018 / 03:39

1 resposta

0

Usar EnvironmentFile= é o caminho a seguir.

Eu não entendo o seu ponto em ter que configurá-lo mais de uma vez ... Você tem que configurá-lo uma vez em cada serviço que precisa dessas variáveis ...

Serviço 1:

[Unit]
Description=service 1

[Service]
ExecStart=someCmd
EnvironmentFile=/path/to/common.env
...

Serviço 2:

[Unit]
Description=service 2

[Service]
ExecStart=someCmd2
EnvironmentFile=/path/to/common.env
...

E mantenha todas as configurações de VAR=VALUE no arquivo /path/to/common.env .

A sintaxe do arquivo de ambiente é compatível com a dos scripts de shell, então você pode até ter sua fonte em .bash_profile

# ~/.bash_profile
if [ -f /path/to/common.env ]; then
    . /path/to/common.env
fi

Uma alternativa é usar systemctl set-environment ou systemctl import-environment para definir variáveis de ambiente global no PID 1. (Consulte docs aqui .

Você ainda pode precisar de PassEnvironment= para exportar essas variáveis em serviços específicos, mas, nesse caso, você só precisará listar os nomes das variáveis.

Eu realmente não acho que essa é a melhor solução, acho que EnvironmentFile= é muito mais auto-suficiente, elegante e apropriado para o seu caso de uso.

    
por 02.08.2018 / 04:57