启动后自动运行flask应用程序无法正常工作

BBy*_*BBy 1 linux ubuntu flask python-2.7

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

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

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

/etc/配置文件

# 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

Run Code Online (Sandbox Code Playgroud)

开始脚本.py

# 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

Run Code Online (Sandbox Code Playgroud)

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

socket.error: [Errno 98] Address already in use
Run Code Online (Sandbox Code Playgroud)

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

我在这里错过了什么吗?

Res*_*her 6

我建议为您的应用程序创建一个服务,它并不像您想象的那么痛苦。这将在网络启动后开始,因此您不需要增加延迟的中间脚本。如果您不想以 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
Run Code Online (Sandbox Code Playgroud)

然后你可以运行:

sudo systemctl start my_project    
sudo systemctl status my_project
Run Code Online (Sandbox Code Playgroud)

如果不好,请调整并尝试:

sudo systemctl restart my_project
sudo systemctl status my_project
Run Code Online (Sandbox Code Playgroud)

如果好:

sudo systemctl enable my_project
Run Code Online (Sandbox Code Playgroud)

重新启动您的 pi 并验证它是否一切正常。

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

  • 非常感谢您引导我走向正确的方向。使用提供的方法后,我的 Flask 应用程序运行完美。我唯一需要改变的是将 `ExecStart=python /home/pi/project/script.py` 更改为 `ExecStart=/usr/bin/python /home/pi/project/script.py` 否则它会抱怨“绝对路径”。 (2认同)