bash等待第一个python文件在继续之前启动

时间:2015-01-23 14:56:44

标签: python bash

我有这个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服务器那样。也许这就是为什么解决方案不会起作用的问题。

3 个答案:

答案 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&&确保第二个命令仅在第一个返回退出状态为零后运行。