通过 nginx 为 Flask 创建 systemd 服务

通过 nginx 为 Flask 创建 systemd 服务

我正在通过 nginx 在服务器上运行 Flask 应用程序。我想创建一个 systemd 文件,这就是我所拥有的:

[Unit]
Description=my123 website
After=syslog.target
Requires=postgresql.service

[Service]
ExecStart=/home/user_123/my_web_app/run.py &
ExecStop=
Restart=on-abort
WorkingDirectory=/home/user_123/my_web_app/
SyslogIdentifier=my_web_app
User=user_123

[Install]
WantedBy=multi-user.target

我在本地将其运行为./run.py.现在, ExecStartand中应该有什么ExecStop?我认为ExecStart是正确的,因为我有它&。但又如何呢ExecStop

答案1

不,你应该绝不添加。&ExecStart这将使 systemd 认为您的单元是进行分叉的进程。另外,您不需要ExecStop理解 SIGTERM 的服务(flask 的内置网络服务器可以),systemd 知道将信号发送到哪里。

即 systemd 跟踪开始的 PID ExecStart,然后知道当您要求终止进程时向何处发送 SIGTERM。

(一个单元type=可以使分叉比这更复杂一些。但默认单元type=认为没有分叉。)

额外的

在 Nginx 后面运行内置的 Flask 服务器将会呈现你非常甚至容易受到微不足道的 DoS 攻击。 Flask 内置服务器不适用于生产用途。对于 Nginx,你应该使用类似的东西uWSGI

Flask 文档有一个关于 uwsgi 的部分,并且您可以轻松映射命令行来编辑uWSGI配置文件选项。 uWSGI 文档有一个关于 systemd 的部分。你真的应该使用 systemd 来启动一个类似于 uWSGI 的真正的网络服务器,而不是内置的 Flask。

相关内容