同时执行几个脚本实例

时间:2017-02-17 15:54:01

标签: bash shell scripting

我有一个执行带有不同args

的脚本的crontable
0,5,10 * * * * /path/to/logScript "script2"
0,5,10 * * * * /path/to/logScript "script1" 
0,5,10 * * * * /path/to/logScript "script3" 

脚本

#!/bin/bash     
    script=$1

    $script args >/path/tmp/log.out 2>/path/tmp/log.err
    if [ ! -s  /path/tmp/log.err ]; then
       echo -n "$(date) success: " >> /path/logfile
       cat /path/tmp/log.out >> /path/logfile
    else
       echo -n "$(date) errors: " >> /path/logfile
       cat /path/tmp/log.err >> /path/logfile
    fi

我认为我遇到的问题是同时执行脚本。脚本没有得到正确的返回值(知道它是stderr还是stdout)。如果我在终端中一个接一个地执行crontable行,它可以正常工作,但是当它自动执行时,我得到的数据是不正确的。

我试图通过将此更改变为crontable来解决此问题,但我仍然遇到同样的问题。

0,5,10 * * * * /path/to/logScript "script2"&
0,5,10 * * * * /path/to/logScript "script1"& 
0,5,10 * * * * /path/to/logScript "script3"&

2 个答案:

答案 0 :(得分:1)

如果所有命令同时运行,请认为您可以将命令组合在一个唯一的命令中,使用&在命令结束时将它们推送到后台模式,如下所示:

Array

答案 1 :(得分:0)

您需要将其作为后台流程运行(在流程行的末尾添加"&"以便您可以"生成"它们)

你也可以将它包装成一个循环,其中i是进程数,并在同一个文件中运行它。

func () {
 #do this
 #do that
 #hit him with a bat
}
然后在sh      #!/斌/庆典

 for i in $(seq 0 5);

 do

 function() & 

 echo "child pid: " $! 

 done