【问题标题】:uWSGI not restarting after being idleuWSGI 在空闲后没有重新启动
【发布时间】:2018-01-08 07:32:24
【问题描述】:

我在 ubuntu 16 上使用 uwsgi 和 systemd。

我从这里按照每个应用程序一项服务下的说明进行操作:http://uwsgi-docs.readthedocs.io/en/latest/Systemd.html

如果我启动 systemd 套接字并访问该站点,一切正常。 但是在空闲时间(在 ini 文件中指定)之后,uwsgi 进程被终止,进一步的请求似乎不会重新启动/重新激活进程。

workers have been inactive for more than 30 seconds (1501589319-1501589288)
SIGINT/SIGQUIT received...killing workers...
worker 1 buried after 1 seconds
worker 2 buried after 1 seconds
goodbye to uWSGI.

这是我的 ini 文件:

[uwsgi]
module = wsgi

logto = /tmp/uwsgi.log

master = true
processes = 2
cheap = true
idle = 30
die-on-idle = true

manage-script-name = true

这是我的 systemd 套接字配置:

[Unit]
Description=Socket for uWSGI app

[Socket]
ListenStream=/var/run/uwsgi/myapp.socket
SocketUser=www-data
SocketGroup=www-data
SocketMode=0666

[Install]
WantedBy=sockets.target

这是我的 systemd 服务配置:

[Unit]
Description=uWSGI app
After=syslog.target

[Service]
ExecStart=/home/myapp/venv/bin/uwsgi \
        --ini /home/myapp/uwsgi/uwsgi.ini \
        --socket /var/run/uwsgi/myapp.socket
User=www-data
Group=www-data
Restart=on-failure
KillSignal=SIGQUIT
Type=notify
StandardError=syslog
NotifyAccess=all
RuntimeDirectory=uwsgi
WorkingDirectory=/home/myapp

【问题讨论】:

    标签: python uwsgi systemd


    【解决方案1】:

    在摆弄了将近一天之后,我在相关设置的文档中找到了答案。虽然由于我不使用皇帝,所以不是同一种设置,但它确实让我知道发生了什么。

    socket 激活只在第一次起作用的原因是因为 uwsgi 覆盖了由 systemd socket 创建的 socket 文件。

    看到绿色的“!”此页面上的重要框: http://uwsgi-docs.readthedocs.io/en/latest/OnDemandVassals.html

    上面写着:

    如果您将在您的 vassal 配置中定义与 Emperor 用于按需操作,vassal 将覆盖该套接字文件。 这可能会导致意外行为,例如按需 该封臣的激活只会起作用一次。

    所以在我的情况下,我没有皇帝,但 systemd 的行为就像皇帝。

    那么解决办法是什么?

    去掉systemd服务文件中ExecStart中的--socket参数。

    而不是拥有

    ExecStart=/home/myapp/venv/bin/uwsgi \
            --ini /home/myapp/uwsgi/uwsgi.ini \
            --socket /var/run/uwsgi/myapp.socket
    

    我改成

    ExecStart=/home/myapp/venv/bin/uwsgi \
            --ini /home/myapp/uwsgi/uwsgi.ini
    

    之后,我停止了 systemd 服务和套接字,执行了systemctl daemon-reload 并再次启动了 systemd 套接字。 Evrything 开始按预期工作 - systemd 套接字激活适用于 uwsgi! :)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-29
      • 1970-01-01
      相关资源
      最近更新 更多