bash - 一段时间后停止命令执行并在 shell 脚本中执行下一个命令
问题描述
我想创建一个执行以下操作的脚本:
- 创建一个 Kafka 服务器
- 在 Kafka 上创建主题
- 开始生成有关已创建主题的消息
我的脚本是这样的:
docker run -p 2181:2181 -p 9092:9092 --env ADVERTISED_HOST=localhost --env ADVERTISED_PORT=9092 spotify/kafka
bin/kafka-topics.sh --create --bootstrap-server localhost:9092 --replication-factor 1 --partitions 1 --topic my_topic
jq -rc . messages.json | bin/kafka-console-producer.sh --bootstrap-server localhost:9092 --topic my_topic
但是第一个命令的执行过程永远不会结束,它不能进入第二步。我如何了解 Kafka 服务器已准备就绪,之后如何执行下一个命令?
解决方案
您可以添加-d
选项以run
在不附加到容器的情况下运行容器,从而允许您的脚本立即继续。这引发了一个问题,即在服务器准备好接受您的 shell 脚本发出的任何请求之前要等待多长时间。一个粗略的解决方法是插入一个调用来sleep
等待你认为必要的时间。
docker run -d ...
sleep 10 # Ten seconds should be plenty
bin/kafka-topics.sh ...
推荐阅读
- javascript - 为什么 Puppeteer-firefox 在服务器上不起作用?
- java - 拥有静态变量的初始值和更新值
- mysql - 对表的所有列应用函数
- vue.js - 如何根据另一个组件的鼠标悬停更改 vuetify 组件的道具?
- sql - 编写函数(pl/pgsql)以确定相似度的问题
- javascript - 单击内部链接时防止浏览器打开两个选项卡
- .htaccess - Htaccess 重写仅影响特定子目录并替换 url 数据的特定结尾
- c# - 如何在 5 秒内改变颜色?
- scheme - 带有 pdflatex -jobname 的 Guile 计划系统*
- javascript - 如何使用酶浅渲染从 JSX 获取道具作为道具传递?