我有一些测试脚本,每个脚本都运行一个测试
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 &