【问题标题】:running multiple commands in parallel in bash在 bash 中并行运行多个命令
【发布时间】:2017-11-17 19:57:24
【问题描述】:

我想在 bash 中并行运行多个脚本/命令。 这是 bash 脚本:

python test_script.py &
docker stop process &
docker stop process1 &
sleep(1)
wait

docker start process1 &
docker start process &
wait

在这里,我正在运行多个 docker,并希望在我的脚本 python test_script.py 运行时启动/停止 docker。

例如:python 脚本正在运行并且并行运行,我想停止 process 和 process1 docker。 python 脚本仍在进行中,然后说等待或睡眠 1 分钟,然后再次启动该过程。

我怎样才能实现它?

【问题讨论】:

标签: bash shell wait


【解决方案1】:

您可以结合以下规则:

X; Y 运行 X 再运行 Y,不管 X 是否成功

X && Y 如果 X 成功则运行 Y

X || Y 如果 X 失败则运行 Y

X & 在后台运行 X。

【讨论】:

  • 感谢亚历克斯的回答。我希望在脚本中并行运行这些命令。在提到的 bash 脚本中,python 测试脚本正在运行,然后在几秒钟后并行运行,我想启动/停止 docker 图像。
【解决方案2】:

从你原来的描述看来,我们可以把问题组织成两个脚本

  • 一个主要的python脚本test_script.py
  • 一个 docker restart 脚本说restart_docker.sh,其中包含将按顺序执行的所有与 docker 相关的命令

    docker stop process
    sleep 1m
    docker start process
    

使用GNU parallel,您可以提供这两个脚本作为并行执行的参数

parallel ::: 'python test_script.py' 'bash restart_docker.sh'

【讨论】:

  • 谢谢,这有帮助。但是 test_script.py 的输出没有在控制台/CLI 中列出。有没有办法用并行命令显示脚本执行输出?
  • 你执行上述共享命令和并行执行 'python test_script.py' ::: 'bash restart_docker.sh' 有什么区别
  • @Pooja 嗯,这很奇怪,parallel 应该将每个命令生成的所有消息转发到标准输出,也许你不小心添加了一个 &
  • @Pooja 有关parallel 语法的详细用法,您可以随时参考其手册页。简而言之,通过使用parallel ::: A B,这意味着 A 和 B 将作为单独的命令运行,而 parallel A ::: B 意味着 A 是命令,B 是 A 的参数
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-08-04
  • 1970-01-01
  • 2018-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多