systemd 启动的 uwsgi 进程在一段时间后关闭

systemd 启动的 uwsgi 进程在一段时间后关闭

所以我编写了这个简单的 systemd 服务脚本:-

[Unit]
Description=uwsgi server script

[Service]
User=web
Group=web
WorkingDirectory=/var/www/prod/myproject/releases/current
ExecStart=/bin/bash -c 'source ~/.bash_profile; workon myproject; uwsgi --ini /var/www/prod/myproject/releases/current/myproject/uwsgi_prod.ini'

[Install]
WantedBy=multi-user.target

它运行良好 – 它启动了并且我可以在中看到我的 uwsgi 进程htop

然而,它在闲置5分钟后就会莫名其妙地关机。

如果我以 Web 用户身份在 Bash 控制台中执行以下命令手动启动此过程:-

source ~/.bash_profile
workon myproject
uwsgi --ini /var/www/prod/myproject/releases/current/myproject/uwsgi_prod.ini

我的进程闲置后不会死亡。

可能是什么问题?

答案1

systemd与频道上另一位开发人员聊天后解决了这个问题。

将此添加到[Service]部分中解决了问题:-

Type=forking
PIDFile=/tmp/project.pid-3030

原因很简单。如果Type没有声明,则默认值为Type=simple,这意味着进程不会分叉,因此bash退出时systemd会认为进程已死并拆除 cgroup。

答案2

正如您指出的,您需要指定,Type否则systemd默认为Type=simple

但是,那官方 uWSGI 文档,了解如何使用systemd使用Type=notify而不是Type=forking因为那么就没有必要指定PIDFile

相关内容