如何将Flask / Gunicorn应用程序作为系统服务运行

sk

我可以像这样在gunicorn中成功启动flask应用程序:

$ gunicorn registry --daemon --bind x.x.x.x:8000 --workers xxx --pid xxx.api.registry.pid --error-logfile xxx.api.registry.error.log --access-logfile xxx.api.registry.access.log

现在,与systemd相关的配置如下所示:

  • /etc/systemd/system/api-registry.service

    [Unit]
    Description=api-registry
    After=network.target
    
    [Service]
    User=app
    WorkingDirectory=xxx/code/api/registry
    EnvironmentFile=-/etc/sysconfig/api-registry
    ExecStart=/usr/bin/gunicorn --daemon $OPTIONS registry
    ExecReload=/bin/kill -s HUP $MAINPID
    ExecStop=/bin/kill -s TERM $MAINPID
    PrivateTmp=true
    
    [Install]
    WantedBy=multi-user.target
    

并通过以下方式配置设置:

  • / etc / sysconfig / api-registry

OPTIONS="--bind x.x.x.x:8000 --workers 8 --pid xxx.api.registry.pid --error-logfile xxx.api.registry.error.log --access-logfile xxx.api.registry.access.log"

设置systemdLogLeveldebug以下日志:

Jan 27 15:26:02 my-server systemd[31817]: Executing: /usr/bin/gunicorn --daemon --bind 172.31.141.233:8000 --workers 8 --pid /home/app/ip-spotlight/mon/pid/ip-spotlight.api.registry.pid --error-logfile /home/app/ip-spotlight/log/ip-spotlight.api.registry.error.log --access-logfile /home/app/ip-spotlight/log/ip-spotlight.api.registry.access.log registry
Jan 27 15:26:03 my-server systemd[1]: Received SIGCHLD from PID 31817 (gunicorn).
Jan 27 15:26:03 my-server systemd[1]: Child 31817 (gunicorn) died (code=exited, status=0/SUCCESS)
Jan 27 15:26:03 my-server systemd[1]: Child 31817 belongs to api-registry.service
Jan 27 15:26:03 my-server systemd[1]: api-registry.service: main process exited, code=exited, status=0/SUCCESS
Jan 27 15:26:03 my-server systemd[1]: About to execute: /bin/kill -s TERM $MAINPID
Jan 27 15:26:03 my-server systemd[1]: Forked /bin/kill as 31820
Jan 27 15:26:03 my-server systemd[1]: api-registry.service changed running -> stop
Jan 27 15:26:03 my-server systemd[1]: Child 31818 (gunicorn) died (code=exited, status=0/SUCCESS)
Jan 27 15:26:03 my-server systemd[1]: Received SIGCHLD from PID 31818 (n/a).
Jan 27 15:26:03 my-server systemd[31820]: Executing: /bin/kill -s TERM
Jan 27 15:26:03 my-server kill[31820]: Usage:
Jan 27 15:26:03 my-server kill[31820]: kill [options] <pid|name> [...]
Jan 27 15:26:03 my-server kill[31820]: Options:
Jan 27 15:26:03 my-server kill[31820]: -a, --all              do not restrict the name-to-pid conversion to processes
Jan 27 15:26:03 my-server kill[31820]: with the same uid as the present process
Jan 27 15:26:03 my-server kill[31820]: -s, --signal <sig>     send specified signal
Jan 27 15:26:03 my-server kill[31820]: -q, --queue <sig>      use sigqueue(2) rather than kill(2)
Jan 27 15:26:03 my-server kill[31820]: -p, --pid              print pids without signaling them
Jan 27 15:26:03 my-server kill[31820]: -l, --list [=<signal>] list signal names, or convert one to a name
Jan 27 15:26:03 my-server kill[31820]: -L, --table            list signal names and numbers
Jan 27 15:26:03 my-server kill[31820]: -h, --help     display this help and exit
Jan 27 15:26:03 my-server kill[31820]: -V, --version  output version information and exit
Jan 27 15:26:03 my-server kill[31820]: For more details see kill(1).
Jan 27 15:26:03 my-server systemd[1]: Received SIGCHLD from PID 31820 (kill).
Jan 27 15:26:03 my-server systemd[1]: Child 31820 (kill) died (code=exited, status=1/FAILURE)
Jan 27 15:26:03 my-server systemd[1]: Child 31820 belongs to api-registry.service
Jan 27 15:26:03 my-server systemd[1]: api-registry.service: control process exited, code=exited status=1
Jan 27 15:26:03 my-server systemd[1]: api-registry.service got final SIGCHLD for state stop
Jan 27 15:26:03 my-server systemd[1]: api-registry.service changed stop -> stop-sigterm
Jan 27 15:26:03 my-server systemd[1]: Got cgroup empty notification for: /system.slice/api-registry.service/control
Jan 27 15:26:03 my-server systemd[1]: Sent message type=signal sender=n/a destination=n/a object=/org/freedesktop/systemd1/agent interface=org.freedesktop.systemd1.Agent member=Released cookie=5775 reply_cookie=0 error=n/a
Jan 27 15:26:03 my-server systemd[1]: Received SIGCHLD from PID 31819 (gunicorn).
Jan 27 15:26:03 my-server systemd[1]: Child 31819 (gunicorn) died (code=killed, status=15/TERM)
Jan 27 15:26:03 my-server systemd[1]: Child 31819 belongs to api-registry.service
Jan 27 15:26:03 my-server systemd[1]: api-registry.service: cgroup is empty
Jan 27 15:26:03 my-server systemd[1]: api-registry.service changed stop-sigterm -> failed
Jan 27 15:26:03 my-server systemd[1]: Unit api-registry.service entered failed state.
Jan 27 15:26:03 my-server systemd[1]: api-registry.service failed.

请注意,没有virtualenv设置。本质上应该像/usr/bin/python3.4 /usr/bin/gunicorn

您能告诉我我做错了吗?

sk

原来,--daemongunicorn选项和systemd不能一起使用

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

将应用程序作为系统服务运行

如何让在 docker 和 gunicorn 上作为网络服务器运行的letsencrypt Flask 应用程序..?

如何将非服务应用程序作为服务运行

如何将node.js应用程序作为后台服务运行?

如何将Play Framework 2.4.4应用程序作为Windows服务运行?

如何将 qtdbus 应用程序作为 systemd 运行?

将Java应用程序作为服务运行

将 c# 表单应用程序作为服务运行

Flutter:将应用程序作为后台服务运行

将CygWin应用程序作为Windows服务运行

如何使用Gunicorn运行Flask应用程序?

将mlflow作为系统服务运行-未找到gunicorn

如何从本地系统在远程服务器上运行Flask应用程序?

如何将Windows应用程序作为Web应用程序运行

如何将程序作为服务运行

如何在Gunicorn / WSGI Web服务器上运行Django应用程序?

如何将gunicorn作为systemd守护程序运行

如果使用应用程序工厂模式,如何在gunicorn中运行flask应用程序?

如何将Flask应用程序容器与MySQL服务器容器连接?

如何将android应用程序连接到python Flask服务器?

如何将Flask应用程序连接到在Docker中运行的SQLite DB?

无法将应用程序作为服务启动,但是作为独立进程运行就可以了

使用Nginx和Gunicorn运行Flask应用程序

将 Web 应用程序组件作为单个服务与 Kubernetes 中的多个服务运行

如何将flask和flask_sockets集成到在uwsgi下运行的单个应用程序

如何将“scrapy”项目作为常规“python”应用程序运行以便从 lambda 运行它?

将Java应用程序作为* nix守护程序或Windows服务运行的最佳方法?

如何部署通过服务器作为服务器运行的Java应用程序?

如何将简单的 Python 应用程序与简单的 Flask 应用程序合并?