Python仮想環境で実行され、uWSGIとNginxで使用されるFlaskアプリケーションがあります。
アプリケーションの起動を管理するためにsystemdソケットの有効化を使用したいと思います。
関連する構成は次のとおりです。
uwsgi-flask.service
[Unit]
Description=a uWSGI app
After=syslog.target
[Service]
Type=notify
User=www-data
Group=www-data
WorkingDirectory=/home/www-data/my-app
ExecStart=/bin/bash -c "source venv/bin/activate && uwsgi \
--ini flask-uwsgi.ini \
--socket /dev/shm/flask.sock"
Restart=always
KillSignal=SIGQUIT
StandardError=syslog
NotifyAccess=all
uwsgi-flask.socket
[Unit]
Description=Socket for uWSGI app
[Socket]
ListenStream=/dev/shm/flask.sock
SocketUser=www-data
SocketGroup=www-data
SocketMode=0660
[Install]
WantedBy=sockets.target
nginx.conf
server {
listen 80;
server_name localhost;
location / {
root /home/www-data/my-app/public;
try_files $uri @flask;
}
location @flask {
uwsgi_pass unix:/dev/shm/flask.sock;
include uwsgi_params;
}
}
systemdソケットを起動して要求をすると:
systemctl start uwsgi-flask.socket
最初の要求は常に次の504応答を受け取ります。
504 Gateway Time-out
しかし、2回目以降の要求は正常です。これは、最初の要求が行われたときにUnixソケットが準備されていないのと同じです。
奇妙なことは、私が始めたときuwsgi-flask.service直接は問題ありません。
systemctl start uwsgi-flask.service
上記の問題の原因は何ですか?