我有一个 Flask 应用程序在 python 虚拟环境中运行,并与 uWSGI 和 Nginx 一起使用。
我想使用 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
但第二次及以后的请求都是正常的。就好像发出第一个请求时 unix 套接字尚未准备好一样。
奇怪的是,如果我开始uwsgi-flask.service直接就没有问题了:
systemctl start uwsgi-flask.service
造成上述问题的原因可能是什么?