等待網路連線

這故事是發生在重新開機後,Windows啟動網卡的速度實在太慢,造成ant的get task發生問題。已試過設定retries property,但無法解決問題。因此改透過batch的方式,確認網路連線正常後才去執行我們要執行的工作。

直覺的方法就是透過ping指令,並確認目標主機可以連線即可。為了避免語系問題,一開始我就使用chcp將語系切成英文。

chcp 437
set CHECK_HOST=www.yahoo.com.tw
ping %CHECK_HOST% -w 1000 -n 2 | find "Reply from"
接著透過for迴圈與label做結果確認與Retry,當然Retry是需要最大限度的,直接看看完整的batch吧!
@echo off
chcp 437
set CHECK_HOST=tonylin.idv.tw
set CMD_CHECK_HOST=ping %CHECK_HOST% -w 1000 -n 2 ^^^| find "Reply from"

set MAX_TIMES=5
set /a "COUNT=0"

:CHECK_CONNECTION
for /f "usebackq tokens=*" %%r in (`%CMD_CHECK_HOST%`) do (
	goto :DO_JOB
)

set /a "COUNT = COUNT + 1"
if "%COUNT%" == "%MAX_TIMES%" (
	echo Retry a connection to %CHECK_HOST% failed. Force to do the job.
	goto :EXIT
)

echo Retry a connection to %CHECK_HOST% %COUNT% time(s)
timeout 1 > NUL

goto :CHECK_CONNECTION

:DO_JOB
echo DONE!

:EXIT
我設定MAX_TIMES為最大限制次數,COUNT為重試次數。在每次執行失敗後,COUNT都會加一,直它達到MAX_TIMES後,就會跳到:EXIT。另外,每次執行失敗,我都會透過timeout指令來做sleep動作。當目標可以正常連線後,就會進入for迴圈,接著跳至:DO_JOB。

友藏內心獨白: 往往簡單的script,可以讓許多工作更為可靠!