![为什么 systemd 套接字激活尚未准备好处理第一个请求](https://linux22.com/image/203540/%E4%B8%BA%E4%BB%80%E4%B9%88%20systemd%20%E5%A5%97%E6%8E%A5%E5%AD%97%E6%BF%80%E6%B4%BB%E5%B0%9A%E6%9C%AA%E5%87%86%E5%A4%87%E5%A5%BD%E5%A4%84%E7%90%86%E7%AC%AC%E4%B8%80%E4%B8%AA%E8%AF%B7%E6%B1%82.png)
我有一个 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
造成上述问题的原因可能是什么?