在Shell脚本中定时异步任务

时间:2012-06-14 18:31:20

标签: linux bash shell unix

基本上我正在尝试编写一个脚本来强调测试我的服务器并确保命令正在运行。我的脚本没有按预期工作。下面是脚本。基本上,脚本正在执行的命令不是异步运行,也不是将它们的输出写入结果文件。有什么建议吗?

#Script to load test the swift command on a linux box

numOfTests=100
echo "Starting Swift Load Tester ($numOfTests iterations)"

mkdir /srv/www/htdocs/audiotest/stress_test
mkdir /srv/www/htdocs/audiotest/half_sec_test
mkdir /srv/www/htdocs/audiotest/sec_test

echo "This is the prompt text" > /srv/www/htdocs/audiotest/prompt.txt

echo "Beginning Stress Test..."

#Clear results text file
echo "" > results.txt

for((i=0; i < numOfTests; i++))
do
    (time /opt/swift/bin/swift -n Allison-8kHz -o /srv/www/htdocs/audiotest/stress_test/$i.wav -f /srv/www/htdocs/audiotest/prompt.txt &) >> results.txt 2>&1
done

echo "Done"
echo "Beginning 1/2 second interval test..."

for((i=0; i< numOfTests; i++))
do
    (time /opt/swift/bin/swift -n Allison-8kHz -o /srv/www/htdocs/audiotest/half_sec_test/$i.wav -f /srv/www/htdocs/audiotest/prompt.txt &) >> results.txt 2>&1
    sleep .5
done

echo "Done"
echo "Beginning 1 second interval test..."

for((i=0; i< numOfTests; i++))
do
    (time /opt/swift/bin/swift -n Allison-8kHz -o /srv/www/htdocs/audiotest/sec_test/$i.wav -f /srv/www/htdocs/audiotest/prompt.txt &) >> results.txt 2>&1
    sleep 1
done

echo "Done"

echo "Load Testing Completed"

2 个答案:

答案 0 :(得分:2)

当您使用>作为重定向运算符时,它会覆盖该文件。因此,运行的最后一个测试将是您看到的唯一输出。请改用>>。并且time将其输出写入stderr,因此如果要查看这些结果,您还需要重定向stderr。

答案 1 :(得分:1)

使用子shell并重定向stderr,看它是否适合你。

(时间myCommand [args]&amp;)&gt; results.txt 2&gt;&amp; 1