啓動腳本中避免目標地址爲域名的網絡連接

項目啓動腳本想要判斷當前網絡環境(內網是否連通),於是加了如下腳本代碼:

    ping -c1 -W1 xxx.xxx.com > /dev/null
    if [ $? = 0 ]; then

我們的項目啓動腳本安裝到/etc/init.d/下面了,因此會隨服務器重啓而啓動。於是就出現了下面的情景: 某些服務器啓動花了幾十分鐘時間才啓動完成。 這部分服務器在啓動的時候網絡不通。

解決方法將腳本改成如下:

    ping -c1 -W1 172.xxx.xxx.xx > /dev/null
    if [ $? = 0 ]; then

將腳本中連接測試的目標從域名改成了IP,這個問題就解決了。


原因:

域名解析的過程阻塞的,即請求域名服務器解析目標域名爲IP的操作是阻塞的,當服務器無網絡,則網絡請求阻塞在域名解析的步驟。


以上的問題同樣可能會出現在linux c函數gethostbyname(hostname)中,同樣,也應該避免進程建立之前(啓動完成判斷,比如建立pid之前)調用改函數。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章