最近工作上需要寫一個script每隔10分鐘就重複做A,B,C三件事情,但是有一個問題,A在正常情況下30秒內做完了,但是一旦出問題,
就會一直停在那邊,所以常常等我心血來潮來看看它跑得怎麼樣了的時候,就發現他已經卡在A步驟好幾個小時了. 所以我需要Timeout
function! 而且最好再來個retry機制.
timeout很簡單,只要搜尋 "linux timeout" , "linux command timeout" ...等等,馬上就會用了.
timeout 2s ping 127.0.0.1
那retry呢? retry就用一個for loop,重複做n次,如果n次以內有執行成功就break,否則就做到n次為止, 完整的 shell script範例如下:
========================================
#! /bin/bash
RETRY_LIMIT=3
TIME_OUT=3
count=0
for (( n=0; n<$RETRY_LIMIT; n++));
do
count=$(($count+1))
printf "run do_something $count times\n\n"
timeout $TIME_OUT ./do_something.sh
status=$?
printf "\n"
if [ $status -eq 0 ]; then
echo "break for loop"
exit 0
fi
done
exit 1
RETRY_LIMIT=3
TIME_OUT=3
count=0
for (( n=0; n<$RETRY_LIMIT; n++));
do
count=$(($count+1))
printf "run do_something $count times\n\n"
timeout $TIME_OUT ./do_something.sh
status=$?
printf "\n"
if [ $status -eq 0 ]; then
echo "break for loop"
exit 0
fi
done
exit 1
=======================================
ps. do_something.sh 是一個為了測試這個timeout and retry寫的script,
他會隨機的sleep 1到6秒,script如下:
=======================================
#!/bin/bash
echo "start running do_something()"
num=$[$RANDOM%6+1]
echo "sleep $num seconds"
sleep $num
echo "end of do_something()"
=======================================
echo "start running do_something()"
num=$[$RANDOM%6+1]
echo "sleep $num seconds"
sleep $num
echo "end of do_something()"
沒有留言:
張貼留言