linux 使用多線程 批量測試網站是否正常shell

來源:互聯網
上載者:User

標籤:shell   linux   

#!/bin/bash#取出網站資料web=`cat website.txt`if [ -z "$web" ];then #判斷長度如果為0,則為真。沒有需要測試網站 echo "Data that is not tested" exit 1fitest -f result.log && rm -f result.log #test -f 如果是一個普通檔案則為真function delay { sleep 3}tmp_fifofile=/tmp/$$.fifo #聲明管道名稱,‘$$‘表示指令碼當前啟動並執行進程PIDmkfifo $tmp_fifofile #建立管道exec 6<>$tmp_fifofile #建立檔案標示符“5”,這個數字可以為除“0”、“1”、“2”之外的所有未聲明過的字元rm $tmp_fifofile #清除建立的管道檔案#定義並發線程數,需根據vps配置進行調整。thread=100for ((i=0 ;i<$thread;i++ ))do echo ; #借用read命令一次讀取一行的特性,使用一個echo預設輸出一個分行符號,來確保每一行只有一個線程佔位;這裡讓人聯想到生產者&消費者模型,管道檔案充當訊息佇列,來記錄消費者的需求,然後由生產者去領任務,並完成任務,這裡運用了非同步解耦的思想。done>&6 #將佔位資訊寫入管道#開始多線程迴圈檢測for url in $webdo read -u6 #從檔案描述符管道中,擷取一個管道的線程佔位然後開始執行操作;read中 -u 後面跟fd,表示從檔案描述符中讀入,該檔案描述符可以是exec新開啟的。 { #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 #任務執行完後在fd5中寫入一個預留位置,以保證這個線程執行完後,線程繼續保持佔位,繼而維持管道中永遠是100個線程數,&表示該部分命令/任務放入後台不佔當前的bash,實現平行處理}&done#等待所有線程執行完畢waitexec 6>&- #關閉fd6的管道#找出非200返回碼的網站echo List of exception website:cat result.log | grep -v 200exit 0

linux 使用多線程 批量測試網站是否正常shell

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.