首页 > 解决方案 > 一段时间后停止命令执行并在 shell 脚本中执行下一个命令

问题描述

我想创建一个执行以下操作的脚本:

  1. 创建一个 Kafka 服务器
  2. 在 Kafka 上创建主题
  3. 开始生成有关已创建主题的消息

我的脚本是这样的:

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 服务器已准备就绪,之后如何执行下一个命令?

标签: bashshellapache-kafkakafka-consumer-apikafka-producer-api

解决方案


您可以添加-d选项以run在不附加到容器的情况下运行容器,从而允许您的脚本立即继续。这引发了一个问题,即在服务器准备好接受您的 shell 脚本发出的任何请求之前要等待多长时间。一个粗略的解决方法是插入一个调用来sleep等待你认为必要的时间。

docker run -d ...
sleep 10  # Ten seconds should be plenty
bin/kafka-topics.sh ...

推荐阅读