我有这个bash:
#!/bin/sh
# launcher.sh
echo "Remote Control Server is starting up..."
sudo python RControlPanel.py &
wait &
sudo python startup.py &
wait
第一个python文件是一个烧瓶服务器,它必须先启动它。 第二个文件是初始化覆盆子pi上的组件,并打开几个LED和东西。编写脚本的方式首先需要使用flask应用程序,然后初始化组件。 似乎烧瓶应用程序启动需要更长时间,而bash脚本继续运行startup.py
是否可以确保烧瓶应用程序正在运行,然后继续下一个脚本?我虽然等到最后会工作,但它没有。我甚至试过睡觉。
更新:我不太确定但是,我认为当烧瓶应用程序运行时,正在进行无限循环,并等待请求,就像普通的Web服务器那样。也许这就是为什么解决方案不会起作用的问题。
答案 0 :(得分:3)
我想Flask服务器会打开一些HTTP端口?让我们在端口8080上说,那么你可以像这样轮询应用程序:
while ! curl http://localhost:8080 -m1 -o/dev/null -s ; do
sleep 0.1
done
选项:
-m1
允许HTTP请求最多1秒。如果您的防火墙配置为静默地将数据包丢弃到关闭的端口,这应该会使其更快。-o/dev/null
因此HTTP响应正文无法打印。-s
隐藏任何错误,正如预期的那样。如果您仍希望看到"连接已拒绝,请添加-S
"消息滚动直到服务器启动。
答案 1 :(得分:1)
我提出了一个使用托马斯答案的解决方案。 我创建了一个名为webserver.sh的sh文件:
echo "Remote Control Server is starting up..."
sudo python RControlPanel.py
然后是第二个名为components.sh的文件:
while ! curl http://127.0.0.1:80 -m1 -o/dev/null -s ; do
sleep 0.1
echo "Web Server still loading" #This line is for testing purposes
done
sudo python startup.py
echo "Startup Initialazation done. System Ready!"
和thrid文件launcher.sh:
./launcher.sh
./remoteServer.sh
第一个文件仅启动Web服务器。没有其他代码需要在那里执行,因为它将被跳过,因为烧瓶应用程序是一个无限循环,它将跳过它下面的所有内容。
biggening的第二个文件是使用Thomas代码检查Web服务器是否正在运行。如果没有继续循环,直到webserver(Flask应用程序)活跃起来,然后运行初始化组件的startup.py python脚本。
第三个文件只是调用launcher.sh和remoteServer.sh。所以我可以在一个文件中运行我的整个项目,无论哪一个都要先启动。
答案 2 :(得分:0)
只需使用:
sudo python RControlPanel.py && sudo python startup.py &
Double&&确保第二个命令仅在第一个返回退出状态为零后运行。