我正在編寫shell腳本,其中經常將一些東西寫入文件 ,之後執行讀取該文件的應用程序。我發現通過我們公司的網絡延遲差異很大,所以例如簡單的sleep 2
將不夠健壯。如何處理shell腳本中的NFS延遲
我試着寫一(配置)超時循環是這樣的:
waitLoop()
{
local timeout=$1
local test="$2"
if ! $test
then
local counter=0
while ! $test && [ $counter -lt $timeout ]
do
sleep 1
((counter++))
done
if ! $test
then
exit 1
fi
fi
}
這適用於test="[ -e $somefilename ]"
。然而,測試存在是不夠的,我有時需要測試某個字符串是否寫入文件。我試過 test="grep -sq \"^sometext$\" $somefilename"
,但這沒有奏效。有人能告訴我爲什麼嗎?
是否還有其他的,不太詳細的選項來執行這樣的測試?
是否可以簡單地在文件上運行尾部,並只檢查尾部的輸出(即最後一行)? 這假設尾巴更聰明地檢查然後你的腳本檢查文件何時更改(機會是,尾巴以更合適的方式) – nos 2009-07-03 15:14:00
我認爲正確的方法將取決於「有些東西」是什麼以及什麼「應用程序」是。你能否提供你想要解決的實際問題的更多細節?所寫的問題有點模糊;可能會有完全不同的方法,你沒有想到。 – 2009-12-20 09:15:40
看到我編輯的答案。 – 2009-12-24 00:44:46