通过systemd服务启动Flask

3

有一个systemd服务文件'/etc/systemd/system/flask-app.service:

[Unit]
Description="flask-app"
After=network.target

[Service]
User=root
WorkingDirectory=/root/FlaskApp/
Environment=/root/FlaskApp/flask-app/bin
ExecStart=/root/FlaskApp/flask-app/bin/flask run --host=0.0.0.0
Restart=on-failure

[Install]
WantedBy=multi-user.target

在执行sudo service flask-app start后没有任何反应,systemctl status也没有提供任何具体信息。 但是,当我通过控制台运行ExecStart命令(/root/FlaskApp/flask-app/bin/flask run --host=0.0.0.0),服务就会启动。

P.S. 我已经导出了变量FLASK_APP=flask-app.py

P.P.S. 我的Flask应用程序是在venv环境中创建的。

3个回答

0

这是我的webflask.service文件,你需要在运行或重启服务之前声明环境变量。下面是一个示例:

[Unit]
Description=Flask Web instance
After=network.target

[Service]
User=www-data
Group=www-data
WorkingDirectory=/opt/www
Environment="PATH=/opt/www/env/bin"
Environment="FLASK_SECRET_KEY=1234567"
Environment="FLASK_MYSQL_HOST=localhost"
Environment="FLASK_MYSQL_USER=base"
Environment="FLASK_MYSQL_PASSWORD=password"
Environment="FLASK_MYSQL_DB=base"
Environment="FLASK_APP=app.py"
Environment="FLASK_DEBUG=1"
Environment="TEMPLATES_AUTO_RELOAD=1"
ExecStart=/opt/www/env/bin/flask run --host 0.0.0.0 --port 8000

[Install]
WantedBy=multi-user.target

这是一个Flask服务器示例,它展示了如何获取环境变量:

from flask import Flask
import os 
flask_app = os.environ['FLASK_APP'] 

app = Flask(__name__)

@app.route('/')
def main():
    return f"{flask_app}"

0

我在我的树莓派3上使用了以下命令:

  • sudo systemctl start myscript.service(可以不用 .service 启动)
  • sudo systemctl status myscript.service(检查运行情况)
  • sudo systemctl enable myscript.service(如果一切正常,这将允许自启动)

这里是更多细节https://www.raspberrypi.org/documentation/linux/usage/systemd.md


-2

在创建文件之后,执行

sudo systemctl deamon-reload

您的服务文件中需要做一些更正。

  1. 如果您不打算在 ExecStart 属性中使用相对路径,则不需要 WorkingDirectory=/root/FlaskApp/。
  2. 使用 Environment 属性与您所做的不同。请检查

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接