2014-10-03 199 views
1

看我需要能夠調用這個:殺從慶典

手錶-n1執行cat/proc/mdstat

從慶典。

對於raid創建監視(在mdadm之後--create等),然後殺死它,然後構建過程將結束。

#!/bin/bash 
#PID=$! 
while 
progress=$(cat /proc/mdstat |grep -oE 'recovery = ? [0-9]*') 
do 
    watch -n1 cat /proc/mdstat 
    PID=$(pidof watch) 
    echo "$PID" >> /mnt/pid 
    if (("$progress" >= "100")) 
     then 
      break 
      kill -9 $PID 
    fi 
done 
echo "done" 

但我無法弄清楚如何從bash中取出手錶。我嘗試了PID=$!PID=$$pidof watch在他的循環中,但不能將正確的PID分配給我的變量以使kill -9 $PID

+2

另外,你基本上不應該使用'kill -9'。在正常情況下,只需「殺死」就足夠了。 – tripleee 2014-10-03 11:49:18

+0

在這段代碼中,'break'會導致腳本退出循環,所以'kill'永遠不會被執行。切換這兩條語句的順序。 – tripleee 2014-10-03 11:50:44

+0

請注意watch命令在前臺運行。腳本永遠不會超過手錶的第一次執行。 – nos 2014-10-03 11:54:00

回答

2

這聽起來像你需要觀看運行,直到進度達到100?

watch -n1 cat /proc/mdstat & 
WATCHPID=$! 
while 
progress=$(cat /proc/mdstat |grep -oE 'recovery = ? [0-9]*') 
do 

if (("$progress" >= "100")) 
    then 
     break 

fi 
sleep 1 
done 

kill $WATCHPID 

echo "done" 
+0

太棒了!我只是不明白你是怎麼做的 >看-n1貓/ proc/mdstat **&** 不會背景?我試了一下,但無法從背景中收看 – gek 2014-10-03 13:12:38

+0

@gek我真的不明白你在問什麼。 '&'使命令轉到後臺。您的代碼沒有「&」。 – nos 2014-10-03 13:56:58