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
하지만 두 번째 이후 요청은 정상입니다. 이는 첫 번째 요청이 이루어졌을 때 유닉스 소켓이 준비되지 않은 것과 같습니다.
이상한 점은 내가 시작하면uwsgi-flask.service직접적으로는 문제가 없습니다.
systemctl start uwsgi-flask.service
위 문제의 원인은 무엇일까요?