bash 在继续之前等待第一个 python 文件开始

bash wait for first python file to start before continue

我有这个 bash:

#!/bin/sh
# launcher.sh

echo "Remote Control Server is starting up..."
sudo python RControlPanel.py &
wait &
sudo python startup.py &
wait

第一个 python 文件是一个 flask 服务器,需要先启动它。 第二个文件正在初始化 raspberry pi 上的组件,并打开几个 LED 和其他东西。脚本的写法需要先flask应用再初始化组件。 似乎烧瓶应用程序启动时间更长,bash 脚本继续 运行 startup.py

是否可以确保 flask 应用 运行正在运行,然后继续执行下一个脚本?我虽然在最后等待会起作用,但它没有。我什至试过睡觉。

更新:我不太确定,但我认为当 flask 应用程序 运行s 进入无限循环并等待请求时,就像普通的 Web 服务器一样。也许这就是为什么下面的解决方案不起作用的问题。

我想 Flask 服务器打开了一些 HTTP 端口?假设在端口 8080 上,那么您可以像这样轮询应用程序:

while ! curl http://localhost:8080 -m1 -o/dev/null -s ; do
  sleep 0.1
done

选项:

  • -m1 最多允许 1 秒的 HTTP 请求。如果您的防火墙配置为静默地将数据包丢弃到关闭的端口,这应该会使它运行得更快。
  • -o/dev/null 因此不会打印 HTTP 响应正文。
  • -s 以隐藏任何错误,如预期的那样。

如果您仍想看到 "Connection refused" 消息滚动,请添加 -S,直到服务器启动。

只需使用:

sudo python RControlPanel.py && sudo python startup.py &

双重 && 确保第二个命令仅在第一个 returns 退出状态为零后运行。

我想出了一个解决方案,我正在使用 Thomas 的答案。 我创建了一个名为 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!"

还有第三个文件launcher.sh:

./launcher.sh
./remoteServer.sh

第一个文件仅启动网络服务器。那里不需要执行其他代码,因为它会被跳过,因为 flask 应用程序是一个无限循环,它会跳过它下面的所有内容。

biggening 的第二个文件是使用 Thomas 代码检查网络服务器是否 运行ning。如果它没有一直循环,直到网络服务器(Flask 应用程序)活跃起来,然后 运行 startup.py python 初始化组件的脚本。

第三个文件只是调用 launcher.sh 和 remoteServer.sh。所以我可以 运行 我的整个项目都在一个文件中,无论哪个文件先开始。