A resposta depende se a variável deve ser constante (ou seja, não deve ser modificada pelo usuário obtendo a unidade) ou variável (que deve ser definida pelo usuário).
Como é a sua unidade local, o limite é bastante desfocado e de qualquer forma funcionaria. No entanto, se você começar a distribuí-lo e ele acabar /usr/lib/systemd/system
, isso se tornará importante.
Valor constante
Se o valor não precisar mudar por instância, a maneira preferida seria colocá-lo como Environment=
, diretamente no arquivo da unidade:
[Unit]
Description=My Daemon
[Service]
Environment="FOO=bar baz"
ExecStart=/bin/myforegroundcmd
[Install]
WantedBy=multi-user.target
A vantagem disso é que a variável é mantida em um único arquivo com a unidade. Portanto, é mais fácil mover o arquivo da unidade entre os sistemas.
Valor variável
No entanto, a solução acima não funciona bem quando o sysadmin deve alterar o valor da variável de ambiente localmente. Mais especificamente, o novo valor precisaria ser definido toda vez que o arquivo da unidade for atualizado.
Nesse caso, um arquivo extra deve ser usado. Como - geralmente depende da política de distribuição.
Uma solução particularmente interessante é usar o /etc/systemd/system/myservice.service.d
diretório. Diferente de outras soluções, esse diretório é suportado pelo próprio systemd e, portanto, não possui caminhos específicos da distribuição.
Nesse caso, você coloca um arquivo assim /etc/systemd/system/myservice.service.d/local.conf
que adiciona as partes ausentes do arquivo de unidade:
[Service]
Environment="FOO=bar baz"
Depois, o systemd mescla os dois arquivos ao iniciar o serviço (lembre-se de systemctl daemon-reload
depois de alterar um deles). E como esse caminho é usado diretamente pelo systemd, você não o usa EnvironmentFile=
.
Se o valor deve ser alterado apenas em alguns dos sistemas afetados, você pode combinar as duas soluções, fornecendo um padrão diretamente na unidade e uma substituição local no outro arquivo.
sysconfig
caminho é específico para o Fedora, mas a pergunta é sobre o Arch Linux. A resposta por paluh é mais interessante eu acho