【问题标题】:How do you daemonize a Flask application?你如何守护一个 Flask 应用程序?
【发布时间】:2011-06-13 22:22:57
【问题描述】:

我有一个使用 Flask 用 Python 编写的小应用程序。现在我在 nohup 下运行它,但我想守护它。这样做的正确方法是什么?

【问题讨论】:

    标签: python flask


    【解决方案1】:

    There are several ways to deploy a Flask project。使用gunicorn 部署可能是最简单的,安装 gunicorn 然后:

    gunicorn project:app --daemon
    

    尽管您可能想使用主管或类似的东西来监控 gunicorn(至少使用 --pid 以便您可以轻松地重新加载/停止 gunicorn)。

    【讨论】:

      【解决方案2】:

      如果您已经安装了主管,我认为 gunicorn 会有点多余。下面是一个flask.ini文件,可以放到/etc/supervisord.d/中(然后“supervisorctl reload”重新加载配置并启动进程)。

      command=/opt/flask/env0/bin/python /opt/flask/developer/FlaskWebServer.py
      directory=/opt/flask
      redirect_stderr=true
      startsecs=5
      autorestart=true
      stdout_logfile=/opt/flask/flask.stdout.log
      

      【讨论】:

      • 请注意,使用此设置您正在运行 Flask 内置服务器,它不能很好地扩展。
      【解决方案3】:

      我是一个正在运行的 centos,systemd 为我的所有其他服务工作。 所以我在我的烧瓶应用程序中使用了相同的方法

      使用我的所有 Flask 设置创建一个脚本 sh

      #!/bin/bash
      # flask settings
      export FLASK_APP=/some_path/my_flask_app.py
      export FLASK_DEBUG=0
      
      flask run --host=0.0.0.0 --port=80
      

      将此脚本设为可执行文件

      chmod +x path/of/my/script.sh

      添加一个systemd服务来调用这个脚本

      /etc/systemd/system/
      vim flask.service

      [Unit]
      Description = flask python command to do useful stuff
      
      [Service]
      ExecStart = path/of/my/script.sh
      
      [Install]
      WantedBy = multi-user.target
      

      要完成,请在启动时启用它

      systemctl 启用 flask.service

      关于 systemd 的更多信息:https://www.tecmint.com/create-new-service-units-in-systemd/

      【讨论】:

        【解决方案4】:

        如果您想监督它并在重新启动后保持它的持久性,您可以使用immortal

        你可以这样称呼它:

        immortal -l /var/log/your-app gunicorn project:app

        或通过run.yml,例如:

        cmd: gunicorn project:app
        cwd: /path/of/project
        env:
            DEBUG: 1
            ENVIRONMENT: production
         log:
            file: /var/log/app.log
            age: 86400 # seconds
            num: 7     # int
            size: 1    # MegaBytes
            timestamp: true # will add timesamp to log
         stderr:
            file: /var/log/app-error.log
            age: 86400 # seconds
            num: 7     # int
            size: 1    # MegaBytes
            timestamp: true # will add timesamp to log
         user: www
        

        更多关于不朽:https://immortal.run/about/

        【讨论】:

          猜你喜欢
          • 2015-06-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-01-19
          • 2010-10-06
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多