bash – 如何并行运行多个shell脚本

前端之家收集整理的这篇文章主要介绍了bash – 如何并行运行多个shell脚本前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一些测试脚本,每个脚本都运行一个测试 PHP应用程序.每个脚本都会永远运行

因此,cat.sh,dog.sh和foo.sh各自运行一个PHP脚本.每个shell脚本都循环运行程序,因此它会永远运行,每次运行后都会休眠.

我试图弄清楚如何同时并行运行脚本.在stdout / term窗口中查看程序的输出.

我想,做以下事情可能有用:

foo.sh > &2
dog.sh > &2
cat.sh > &2

在shell脚本中它就足够了,但它不起作用.

foo.sh,runs foo.PHP once,and it runs correctly
dog.sh,runs dog.PHP in a never ending loop. it runs as expected
cat.sh,runs cat.PHP in a never ending loop
 *** this never runs!!!

似乎shell脚本永远不会运行cat.sh.如果我在一个单独的窗口/术语中单独运行cat.sh,它将按预期运行.

有没有人对如何让这些脚本并行运行有任何想法?

您当前的设置是按顺序运行命令.第一个运行并完成,允许第二个启动.第二个永远不会结束,所以第三个永远不会有机会开始.

试试这个:

foo.sh >foo.out 2>foo.err &
dog.sh >dog.out 2>dog.err &
cat.sh >cat.out 2>cat.err &

这将告诉每个命令在后台运行,并将其输出错误信息发送到文件.当命令在后台运行时,它将从当前会话中分离,并允许下一个命令运行.将&符号(&)作为该行的最后一个字符非常重要.否则,可能无法正确识别.

或者,让每个shell脚本运行相关的.PHP脚本,您显然使用与上面相同的语义调用它.在这种情况下,您的foo.sh可能包含:

#!/bin/bash
PHP foo.PHP >foo.out 2>foo.err &

最后,如果您需要真正的并行操作,请查看GNU Parallel.

注意:如果您确实希望输出进入屏幕/终端,则可以不进行输出重定向

foo.sh &

但请记住,同时运行多个命令会导致输出混乱(您现在可能知道哪个输出错误来自哪个命令),如果您注销,则输出无处可去.

猜你在找的Bash相关文章