2017-02-17 50 views
0

我有不同的ARGS执行的脚本,同时几个实例

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 

,我想我有与执行问题执行脚本crontable剧本在同一时间。该脚本没有得到正确的返回值(知道它是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"& 
+1

问题是什么? – malyy

+0

@malyy查看我的编辑 –

+2

你的脚本同时将它们的输出写入相同的文件('/ path/tmp/log.out','/ path/tmp/log.err'和'/ path/logfile') 。 – Cyrus

回答

1

如果所有命令都在同一时间运行,认为你可以在一个独特的一个组合命令,使用&在命令结束时他们推到后台运行模式,就像这样:

0,5,10 * * * * /bin/bash -c '/path/to/logScript "script2" & /path/to/logScript "script1" & /path/to/logScript "script3" & ' 
0

你需要运行它作为后台进程(在生产线的末尾添加“&”,以便你可以“产生”它们)

你也可以把它包装成一个循环,在同一个文件中。

func() { 
#do this 
#do that 
#hit him with a bat 
} 

然后在SH #!/斌/庆典

for i in $(seq 0 5); 

do 

function() & 

echo "child pid: " $! 

done