一開始搭建中國部落格聯盟,既有博友提醒我,做網址大全這類網站維護很麻煩,需要大量的精力去Debug一些已夭折的網站,更是拿松哥的部落格大全舉例。當然,我也是深以為然。前些時間,看到夢軒麗人的boke123網址大全的維護記錄,好像是純手工檢查,張戈實在是佩服的五體投地,太有毅力了。
現在部落格聯盟也收錄的部落格也已破200了,全部來自自主提交,不管你是草博還是名博,張戈不會強買強賣。由於大部分都是建站不過半年的新站,半路放棄、提前太監的部落格估計還是有的,於是我決定還是把網站維護這個工作做起來。
上午用PHP做了一個放到了京東雲試了下,發現檢測速度一般,要等上半天(我寫的php太蹩腳,就不獻醜了)。
隨後,我在VPS上寫了一個多線程的網站狀態檢測指令碼,直接從資料庫load網站地址,然後用curl去檢測返回碼,發現速度非常好,基本1分鐘內就能出結果
以下是指令碼代碼:
#!/bin/bash#Author:ZhangGe#Date:2014-08-21#Desc:Check the site of ZGboke Alliance.#取出網站資料data=`/usr/bin/mysql -uroot -p123456 -e "use zgboke;select web_url from dir_websites where web_status='3';" -N -B | awk '{print $1}'`if [ -z "$data" ];then echo "Faild to connect database!" exit 1fitest -f result.log && rm -f result.logfunction delay { sleep 3}tmp_fifofile=/tmp/$$.fifomkfifo $tmp_fifofileexec 6<>$tmp_fifofilerm $tmp_fifofile#定義並發線程數,需根據vps配置進行調整。thread=100for ((i=0 ;i<$thread;i++ ))do echodone>&6#開始多線程迴圈檢測for url in $datado read -u6 { #curl抓取網站http狀態代碼 code=`curl -o /dev/null --retry 3 --retry-max-time 8 -s -w %{http_code} $url` echo "$code ---> $url">>result.log #判斷子線程是否執行成功,並輸出結果 delay && { echo "$code ---> $url" } || { echo "Check thread error!" } echo >& 6}&done#等待所有線程執行完畢waitexec 6>&-#找出非200返回碼的網站echo List of exception website:cat result.log | grep -v 200exit 0
Ps:關於shell多線程指令碼,後續文章會有一個詳細說明,本文篇幅有限,就不多說了。
以下是中國部落格聯盟第一次成員網站存活檢測的結果:
①、 非200返回碼的異常網站:
②、指令碼抓取的無法訪問網站:
人工訪問篩選結果:
wangyingxue.net(王英學部落格):無法訪問,經確認處於備案中 √
www.tao0102.com(長江部落格):可以訪問 √
blog.hack7d.com(Mcdull技術部落格):無法訪問 ×
www.1992621.com(教師日記):可以訪問 √
www.3miaotu.com(三秒兔):無法訪問 ×
xiaoxiaomayi.com(小小螞蟻部落格):可以訪問 √
www.awrui.com(李文棟部落格):可以訪問 √
Ps:指令碼檢測機製為:8s內未連通的判定為異常,並重試3次,最後輸出結果,若三次均異常則為000。從圖中和人工篩選可以看出,存在一些誤殺,這個和8s的設定有一定關係。可以考慮設定為更長時間,得到更準確的結果,當然最終還是要結合人工確認的,所以也沒多大關係。
後續,中國部落格聯盟會制訂一個檢查周期,最短每星期檢查一次,最長一個月檢查一次,爭取讓每個展示的網站都能正常訪問。當然,我也會將每次檢查的結果公布在中國部落格同盟站長資訊專欄,方便所有成員查看。
由於目前中國部落格聯盟部署在京東雲擎,無法遠程操控資料庫,所以只好暫時用半自動的模式。等以後有時間搬到了阿里雲等VPS上後,將會將指令碼改成全自動狀態,當有網站聯絡多次檢測為失聯狀態時,將會暫時將其設定為隱藏狀態。