2015-03-03 24 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

相關問題