Estou tentando criar uma pasta de tempo de execução em /run/gunicorn
para alguns arquivos de soquete / PID de Gunicorn, que são para um aplicativo Django. Eu posso fazer tudo funcionar se eu criar diretórios manualmente. No entanto, estou tentando tornar isso uma configuração robusta e, eventualmente, usar o Ansible para automatizar tudo.
Acho que tenho duas opções, baseadas neste pergunta .
Opção 1 - RuntimeDirectory
Acho que a primeira opção é usar RuntimeDirectory=
dentro do meu arquivo de serviço systemd, mas não consigo criar a pasta. Os arquivos de serviço contém:
#/etc/systemd/system/gunicorn_django_test.service
[Unit]
Description=gunicorn_django daemon
After=network.target
[Service]
User=gunicorn
Group=www-data
RuntimeDirectory=gunicorn #This line is supposed to create a directory
RuntimeDirectoryMode=755
PIDFile=/run/gunicorn/django_test_pid
WorkingDirectory=/vagrant/webapps/django_venv/django_test
ExecStart=/vagrant/webapps/django_venv/bin/gunicorn --pid /run/gunicorn/django_test_pid --workers 3 --bind unix:/run/gunicorn/django_test_socket django_test.wsgi --error-logfile /var/log/gunicorn/django_test_error.log
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s TERM $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
Quando executo systemctl start gunicorn_django_test.service
, o serviço falha ao iniciar. Quando eu pego a linha exec e executo-a manualmente, recebo Error: /run/gunicorn doesn't exist. Can't create pidfile.
Se eu criar manualmente a pasta /run/gunicorn
, posso fazer as coisas funcionarem.
Opção 2 - tmpfiles.d
A segunda opção é usar tmpfiles.d
para ter uma pasta criada na inicialização, pronta para os arquivos pid / socket. Eu tentei este arquivo:
#/etc/tmpfiles.d/gunicorn.conf
d /run/gunicorn 0755 gunicorn www-data -
Isso cria um diretório, mas é rapidamente excluído de alguma forma e, quando eu inicio o serviço, a pasta não está disponível.
Eu posso adicionar manualmente alguns comandos do PreExec mkdir
ao arquivo de serviço, mas gostaria de saber por que RuntimeDirectory / tmpfiles.d não está funcionando. Obrigado.
Versões / Informações:
Ubuntu 16.04 Server / systemd 229 / Gunicorn 19.7.1 / tempo de execução dir = / run