2017-02-17 49 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