Estou tentando passar uma variável de ambiente definida no shell atual para uma das systemd
unidade que estou escrevendo.
DB_URL=databus.dev.mysite.io:8080
Estou usando isso em um script python que está sendo executado como um serviço. Minha unidade systemd
executará este script como uma unidade que faz uso da variável para seu funcionamento.
[Unit]
Description=device-CompStatus: Computes device availability status
[Service]
Type=simple
ExecStart=/usr/bin/bash -c "/usr/bin/python /opt/deviceCompStatus/deviceCompStatusHandler.py"
Restart=always
[Install]
WantedBy=default.target
A maneira como estou usando a variável no script Python seria
if os.environ.get('DB_URL') is not None:
dbEndPoint = "http://" + os.environ['DB_URL']
O problema é que não consigo usar a variável ao executar o script em systemd
. Eu pesquisei alguns recursos Usando variáveis de ambiente em unidades systemd , diz para usar a atribuição sob [Service]
diretamente como
[Service]
Environment=DB_URL=databus.dev.mysite.io:8080
Como você pode ver, meu DB_URL
pode mudar dependendo do ambiente em que estou implantando minha máquina, pode ser um desenvolvedor ou uma configuração de produção, em que os URLs podem variar.
Como faço isso dinamicamente? ou seja, passar o valor disponível para DB_URL
to systemd
environment?
Eu também tentei usar a opção EnvironmentFile=
para definir um arquivo e passá-lo para o serviço. Mas o mesmo problema novamente, minha variável poderia ser dinâmica e não pode ser codificada.
Atualizar
Depois de usar a opção
systemctl import-environment DB_URL
Eu posso ver a variável disponível no ambiente de systemd
que confirmei por
systemctl show-environment
DB_URL=databus.dev.mysite.io:8080
LANG=en_US.UTF-8
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
mas ainda assim o valor não é refletido no aplicativo python
que eu executo. O os.environ('DB_URL')
é um caminho errado para acessar a variável?