【问题标题】:Running flask app automatically after boot does not work correctly启动后自动运行烧瓶应用程序无法正常工作
【发布时间】:2019-11-23 16:35:14
【问题描述】:

我正在 Raspberry Pi (python 2.7) 中设置 Flask 项目。 手动调用python脚本时运行完美。

但是,我试图在启动后自动运行脚本,它无法正常运行。

我尝试修改 /etc/profile 以在启动后运行脚本;

/etc/profile

# at the end of the profile
#TRIED sudo python /home/pi/project/script.py &
#TRIED sleep 10;sudo python /home/pi/project/script.py &

sudo python /home/pi/project/start_script.py &  # it also fails

start_script.py

import os
import time

time.sleep(10)
os.system('sudo python /home/pi/project/script.py &')

我希望运行服务器没有任何问题,但启动后,它给了我以下错误,

socket.error: [Errno 98] Address already in use

但是,这没有意义,因为这应该只发生一次。

我错过了什么吗?

【问题讨论】:

    标签: linux python-2.7 ubuntu flask


    【解决方案1】:

    我建议为您的应用创建一个服务,它并没有您想象的那么痛苦。这将在网络启动后开始,因此您不需要增加延迟的中间脚本。如果你不想以 root 用户(默认)运行,或者你想使用 virtualenv,你可以添加其他参数到这个文件中。

    创建以下文件/etc/systemd/system/my_project.service:

    [Unit]
    Description=My Project
    After=network.target
    
    [Service]
    WorkingDirectory=/home/pi/project/
    ExecStart=/usr/bin/python /home/pi/project/script.py
    Restart=always
    
    [Install]
    WantedBy=multi-user.target
    

    然后就可以运行了:

    sudo systemctl start my_project    
    sudo systemctl status my_project
    

    如果不好,调整并尝试:

    sudo systemctl restart my_project
    sudo systemctl status my_project
    

    如果好:

    sudo systemctl enable my_project
    

    重启你的 pi 并验证它是否正常工作。

    还要仔细检查您与系统上运行的其他东西一起使用的任何端口。

    【讨论】:

    • 非常感谢您指引我正确的方向。使用提供的方法后,我的 Flask 应用程序可以完美运行。我唯一需要更改的是将ExecStart=python /home/pi/project/script.py 更改为ExecStart=/usr/bin/python /home/pi/project/script.py 否则它会抱怨“绝对路径”。
    • 谢谢,为我工作。我所要做的就是授予所有者执行 my_project.service 文件的权限sudo chmod 744 my_project.service
    猜你喜欢
    • 2015-02-12
    • 2012-01-27
    • 2017-10-18
    • 2020-08-20
    • 2022-01-25
    • 1970-01-01
    • 1970-01-01
    • 2020-01-29
    • 2021-11-06
    相关资源
    最近更新 更多