systemd: valor padrão para a variável de ambiente

5

Eu gostaria de migrar alguns scripts de init do OpenRC para o systemd, mas acho que é um problema geral de manipulação de variáveis de ambiente no systemd.

Arquivos originais do OpenRC

Existe um ficheiro, por ex. /etc/conf.d/fooservice com conteúdo

# value of FOO variable
# you can override default value by uncomenting this line
# FOO=value1

# value of BAR variable
BAR=value2

No script de inicialização original /etc/init.d/fooservice , havia

FOO=${FOO:-default_foo_value}
BAR=${BAR:-default_bar_value}

O resultado foi $FOO==default_foo_value e $BAR==value2

Arquivos systemd migrados

Agora tenho o arquivo de serviço systemd /usr/lib/systemd/system/fooservice.service , que contém

[Service]
EnvironmentFile=/etc/conf.d/fooservice
ExecStart=/usr/bin/fooservice $FOO $BAR

Mas há um problema que $FOO não está inicializado em default_foo_value

Existe uma maneira de dizer ao systemd para usar o valor padrão se não houver valor no arquivo de ambiente? Existe uma maneira de usar o arquivo de ambiente intermediário com valores padrão ou vários arquivos de ambiente encadeados?

SOLUÇÃO:

Isso não é bom. O arquivo /etc/conf.d/fooservice pode ser incompatível porque é "shell script" e o systemd espera "arquivo de ambiente". Na atribuição de valor básico, parece semelhante, mas não é a mesma coisa.

A solução preferida para isso pelo Gentoo é colocar tudo em arquivo de serviço e arquivo de configuração do serviço e não usar o arquivo conf.d adicional.

SOLUÇÃO DE TRABALHO, MAS NÃO PREFERIDA:

Use isso apenas como uma maneira rápida de executar o serviço OpenRC como um sistema.

/usr/lib/systemd/system/fooservice.service agora contém

[Service]
Environment="FOO=default_foo_value"
Environment="BAR=default_bar_value"
EnvironmentFile=/etc/conf.d/fooservice
ExecStart=/usr/bin/fooservice $FOO $BAR
    
por j123b567 18.12.2014 / 10:08