2015-03-03 82 views
1
#!/bin/bash 
# Start.sh 
if [[ $# -ne 1 ]] ; then 
    echo 'Usage :<./Start N# >' 
    exit 1 
fi 

if [[ $1 -ge 1 ]] ; then 
    for ((c=1; c<=$1; c++)) 
    do 
     virsh start VM$c 
     /usr/bin/time -f "%E" ./test-online.sh VM$c & 
    done 
else 
    echo 'Give some positive number !!!' 
fi 
/usr/bin/iostat -x 1 > result.txt 

在上面的脚本中,我测量了写入test-online.sh脚本的VM启动时间。我想在每个后台进程(test-online.sh)结束时停止/ usr/bin/iostat -x 1> result.txt命令。如何运行iostat/vmstat/top/sar直到所有后台进程完成?

如果我们添加“等待”命令而不是“/ usr/bin/iostat -x 1> result.txt”,Start.sh将等待后台进程。但现在我很困惑,该怎么办?

谢谢。

+0

在所有后台作业完成后,您是否希望'iostat'只运行一次? – 2015-03-03 10:12:21

+0

是的,但它的连续性,所以开始后它将无限运行。我们可以给一些时间来运行iostat,但在我的情况下,我想运行这个,直到所有后台进程结束。 – Ankit 2015-03-03 10:15:05

回答

0
#!/bin/bash 
# Start.sh 
if [[ $# -ne 1 ]] ; then 
    echo 'Usage :<./Start N# >' 
    exit 1 
fi 

if [[ $1 -ge 1 ]] ; then 
    for ((c=1; c<=$1; c++)) 
    do 
     virsh start VM$c 
     /usr/bin/time -f "%E" ./test-online.sh VM$c & 
    done 
else 
    echo 'Give some positive number !!!' 
fi 
./kill_script.sh & 
/usr/bin/sar -urdp 1 > result.txt 

在第一个脚本中,我们已经开始大量的后台进程后,我们呼吁kill_script.sh iostart/SAR/vmstat的等前和kill_script.sh我们正在检查是否有子进程,名为test-online.sh,进程Start.sh。如果有那么没有进程走出循环,并杀死的iostat/vmstat的/ SAR等

#!/bin/bash 
#kill_script.sh 
pid=`pgrep -o -x Start.sh` 
out="a" 
while true 
do 
    out=`ps --ppid $pid | grep time` 
    sleep 1 
    echo $out 
    if [ -z "$out" ]; 
    then 
     break; 
    fi 
done 
kill $(pidof sar) > /dev/null 2>&1 

这里的假设是,我们要使用命令即的iostat/vmstat的/ SAR等,以获得唯一的一个系统统计。

1

我曾经有过这个问题。由于我大Python爱好者,我实现了一个模块在python,做的是:https://gist.github.com/myaut/38e5d7cb813ed0db379c

下面是小例子:

#!/usr/bin/python 
# -*- coding: utf-8 -*- 

import os, subprocess 
import time 
import bench 

from datetime import datetime 

cmd = "sleep 40" 
benchdir = '/var/tmp/mybench-%s/' % datetime.now().strftime('%Y.%m.%d.%H.%M') 
print 'Destination is %s' % benchdir 

stats = [bench.statcmd('date', [], 5, False), 
     bench.statcmd('vmstat', ['5']), 
     ] 
bench.run_test(cmd, stats, 'sleep', benchdir) 

模块还支持Python类的统计收集,但我忽略它例如。此示例每5秒运行一次date命令,并连续运行vmstat,并以5作为参数。输出写入/var/tmp/mybench-DATE目录。

再一次,对于非bash实现感到抱歉。希望它有帮助。

+0

先生,我的问题是别的,你正在回答别的问题。我在后台开始了一些进程,然后开始统计数据,并且当所有这些后台进程结束时我都想停止统计数据。 – Ankit 2015-03-04 18:12:59

+0

@Ankit,这就是我的程序所做的 - 它开始“睡眠40”,启动“vmstat”并定期运行“日期”。当“睡眠40”结束时,它会停止'vmstat',将所有数据写入'/ var/tmp/mybench-DATE'并退出 – myaut 2015-03-04 18:16:46

+0

,但从这个意义上讲它也是确定性的,我们不能确定何时所有后台进程几乎100个检查虚拟机是否启动的进程)将结束。 – Ankit 2015-03-04 18:25:49

相关问题