我正在通过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运行.现在,我应该在ExecStart和ExecStop中拥有什么?我认为ExecStart是正确的,因为我有&在里面.但是ExecStop怎么样?
解决方法:
不,你永远不应该添加&到ExecStart.这将使systemd认为你的单位是进行分叉的过程.此外,您不需要ExecStop来获得理解SIGTERM的服务(烧瓶的内置网络服务器),systemd知道在哪里发送信号.
即systemd跟踪ExecStart启动的PID,然后在您要求终止进程时知道发送SIGTERM的位置.
(单位类型=可以使叉子比那更复杂.但是默认单位类型=认为没有叉子.)
额外
在Nginx后面运行内置的烧瓶服务器会让你很容易受到微不足道的DoS攻击.烧瓶内置服务器不适合生产使用.使用Nginx,你应该使用像uWSGI这样的东西.
Flask文档有一个section on uwsgi,您可以轻松映射命令行以编辑uWSGI配置文件选项.并且uWSGI文档有一个section on systemd.你真的应该使用systemd来启动一个类似uWSGI的真实网络服务器,而不是内置的烧录器.
原文地址:https://codeday.me/bug/20190816/1666602.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。