系统启动的uwsgi进程在一段时间后closures

所以我写了这个简单的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分钟后莫名closures。

如果我在bash控制台手动启动这个过程,通过执行,作为web用户: –

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

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

问题是什么?

systemd渠道上的其他开发者聊天后解决。

添加到[Service]部分解决了这个问题:

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

原因很简单。 如果Type没有被声明,那么缺省值是Type=simple ,这意味着进程不会fork,所以当bash退出的时候, systemd认为这个进程已经死了,并且把cgroup断开了。

正如你所说的,你需要指定Type否则systemd默认为Type=simple

然而, 官方uWSGI文档pipe理uWSGI与systemd使用Type=notify而不是Type=forking因为那么就没有必要指定PIDFile