¿Cómo se daemoniza una aplicación Flask?

Tengo una pequeña aplicación escrita en Python usando Flask. En este momento lo estoy ejecutando bajo nohup, pero me gustaría demonizarlo. ¿Cuál es la forma correcta de hacer esto?

Hay varias formas de implementar un proyecto de Flask . Implementar con gunicorn puede ser lo más fácil, instale gunicorn y luego:

gunicorn project:app --daemon 

Aunque es probable que desee utilizar el supervisor o algo por el estilo para monitorear Gunicorn (al menos use --pid para que pueda volver a cargar / detener Gunicorn fácilmente).

Si ya tiene instalado un supervisor, creo que Gunicorn sería un poco redundante. El siguiente es un archivo flask.ini que puede eliminarse en /etc/supervisord.d/ (luego “supervisorctl recargar” para recargar la configuración e iniciar el proceso).

 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 

Si desea supervisarlo y mantenerlo persistente durante los reinicios, puede usar inmortal

Podrías llamarlo así:

Proyecto inmortal -l / var / log / your-app gunicorn: app

O a través de run.yml , por ejemplo:

 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 

Más sobre inmortal: https://immortal.run/about/

Soy un centos en ejecución con systemd trabajando para todos mis otros servicios. Así que utilicé lo mismo para mi aplicación matraz.

Crear un script sh con todas mis configuraciones de Flask

 #!/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 

Hacer este script como ejecutable.

chmod + x ruta / de / mi / script.sh

Agrega un servicio systemd para llamar a este script

/ 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 

Para finalizar, habilitarlo en el arranque.

systemctl habilitar flask.service

Más información sobre systemd: https://www.tecmint.com/create-new-service-units-in-systemd/