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.