无法使用systemctl启动uwsgi的坑

发布时间 2023-10-24 14:39:15作者: 等杰伦下课

使用uwsgi运行flask,无法使用systemctl设置service任务。

正确设置了uwsgi.ini和service配置。使用systemctl start xxx.service可以启动uwsgi进程,但service的状态一直是deactivate, 然后过几秒钟直接结束uwsgi进程,service error。

直接说结论:

删除uwsgi配置文件中设置日志用的daemonize!!

删除uwsgi配置文件中设置日志用的daemonize!!

删除uwsgi配置文件中设置日志用的daemonize!!

原因:(来自chatgpt-4)

当您从uwsgi配置中删除daemonize选项后,uwsgi不再以守护进程的形式运行,而是在前台运行。这意味着uwsgi的标准输出和错误直接连接到了启动它的进程。在您使用systemd启动uwsgi的情况下,systemd会捕获这些输出,并可以使用journalctl来查看。

使用daemonize时,uwsgi尝试在后台运行并将其输出重定向到您指定的日志文件。这可能与systemd的预期行为产生了冲突。可能的是,当uwsgi尝试后台运行时,systemd误认为uwsgi主进程已经完成并尝试关闭服务,从而导致上述的停止和超时问题。

一般来说,当使用systemd管理服务时,最佳做法是让服务在前台运行并让systemd处理日志和服务的生命周期。
如果您希望继续将uwsgi的日志记录到指定的文件中,而不是让systemd通过journalctl来管理,您可以使用uwsgi的logto选项而不是daemonize。
例如: logto = /path/to/your/logfile.log