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.
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.
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.
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.