Como sobrescrever a configuração do ambiente unitário através do arquivo .conf no systemd?

2

Eu tenho este serviço definido em /etc/systemd/system/gunicorn-production.service :

[Unit]
Description=gunicorn production daemon
After=network.target

[Service]
PIDFile=/run/gunicorn_production/pid
User=www-data
Group=www-data
RuntimeDirectory=gunicorn_production
WorkingDirectory=/home/production/current
Environment=WORKERS='2'
ExecStart=/home/production/.virtualenvs/production/bin/gunicorn \
-w $WORKERS \
...
# rest of gunicorn configuration parameters

O serviço inicia / recarrega / pára etc. com os 2 trabalhadores especificados.

Eu ia mover todos os caminhos codificados em um arquivo de configuração para que eu pudesse reutilizar essa definição de serviço e comecei a definir WORKERS em um arquivo no diretório "drop in": /etc/systemd/system/gunicorn-production.d/gunicorn-production.conf :

[Service]
Environment=WORKERS='4'

Se eu systemctl daemon-reload e, em seguida, systemctl restart gunicorn-production , a configuração para 4 trabalhadores não tiver efeito. Eu tentei várias permutações de configuração / nome de arquivo, mas não consigo substituir a configuração do ambiente por meio do arquivo .conf .

De acordo com a página man systemd.units, parece que um diretório "drop in" deve fazer o seguinte:

  

Juntamente com um arquivo de unidade foo.service, um diretório "drop-in" foo.service.d / pode existir. Todos os arquivos com o sufixo ".conf" deste diretório serão analisados após o arquivo ser analisado. Isso é útil para alterar ou adicionar configurações para uma unidade, sem precisar modificar os arquivos da unidade. Cada arquivo drop-in deve ter cabeçalhos de seção apropriados. Note que para unidades instanciadas, esta lógica primeiro procurará pelo subdiretório ".d /" da instância e lerá seus arquivos ".conf", seguidos pelo subdiretório ".d /" e os arquivos ".conf". Observe também que as configurações da seção "[Instalar]" não são respeitadas nos arquivos da unidade de entrada e não têm efeito.

    
por saschwarz 11.09.2016 / 23:14

2 respostas

1

Eu nomeei o diretório drop-in incorretamente. Eu nomeei: /etc/systemd/system/gunicorn-production.d quando deveria ter sido: /etc/systemd/system/gunicorn-production.service.d . Depois que eu corrigi que o novo valor do ambiente foi usado.

    
por saschwarz 12.09.2016 / 13:43
0

Defina o ambiente para esvaziar primeiro (em teoria, isso deve redefinir a variável) e, em seguida, defina-o como 4.

[Service]
Environment=
Environment=WORKERS='4'

Não tenho certeza se isso funcionará, mas esse é o caminho para redefinir um token de arquivo de unidade do systemd com um arquivo drop-in.

    
por Umut 12.09.2016 / 07:30