Shell指令碼
說做就做,簡單的寫了個 Shell 指令碼就搞定了!
指令碼名稱:網站死鏈產生指令碼
指令碼功能:每天定時分析網站前一天的 nginx 日誌, 然後提取狀態代碼為404並且UA為百度蜘蛛的抓取路徑,並寫入到網站根目錄下的 death.txt 檔案,用於提交百度死鏈。
指令碼代碼:
#!/bin/bash
#Desc: Death Chain File Script
#Author: ZhangGe
#Blog: http://你的網域名稱/5038.html
#Date: 2015-05-03
#初始設定變數
#定義蜘蛛UA資訊(預設是百度蜘蛛)
UA=+http://www.baidu.com/search/spider.html
#前一天的日期(nginx日誌)
DATE=`date +%Y-%m-%d -d "1 day ago"`
#定義日誌路徑
logfile=/home/wwwlogs/你的網域名稱_${DATE}.log
#定義死鏈檔案存放路徑
deathfile=/home/wwwroot/你的網域名稱/death.txt
#定義網站訪問地址
website=http://你的網域名稱
#分析日誌並儲存死鏈資料
for url in `cat ${logfile} | grep -i "${UA}" | awk '{print $7 " " $9}' | grep " 404" | awk '{print $1}'`
do
grep "$url" ${deathfile} >/dev/null || echo ${website}${url} >>${deathfile}
done
使用說明:
①、指令碼適用於每天都做了日誌切割的Nginx
②、將代碼儲存為 shell 指令碼,比如 deathlink.sh,然後如下建立任務計劃:
#執行如下命令編輯任務計劃
[root@Mars_Server ~]# crontab -e
#每天淩晨1點執行此指令碼
0 1 */1 * * /root/death.sh >/dev/null 2>&1
#按下ESC,然後鍵入 :wq 儲存並退出
③、執行後,將在網站根目錄產生死鏈檔案:death.txt,可以瀏覽器訪問看看內容,比如:
http://你的網域名稱/death.txt
④、前往立即前往提交這個死鏈檔案即可:
這樣一來,系統會每天執行指令碼,將昨天的百度蜘蛛爬到的404路徑儲存到網站根目錄下的 death.txt,以備百度死鏈抓取工具前來抓取。
值得說明的是,這些死鏈記錄是累加的,已儲存的死鏈資料,就算百度蜘蛛不爬了也會繼續儲存,需要人工清理,不過一般不清理也沒啥問題。
注意事項:如果你的 nginx服務 並沒有配置相應的 access 日誌,請自行在 server 下添加所需網站的 access 日誌,否則指令碼無法使用。
三、其他拓展
①、如果你之前沒有做過 Nginx 日誌切割,那麼可以直接用下面這個指令碼來一次性搞定:
#!/bin/bash
#Desc: Cut Nginx Log and Create Death Chain File
#Author: ZhangGe
#Blog: http://你的網域名稱/5038.html
#Date: 2015-05-03
#①、初始設定變數:
#定義access日誌存放路徑
LOGS_PATH=/home/wwwlogs
#定義蜘蛛UA資訊(預設是百度蜘蛛)
UA=+http://www.baidu.com/search/spider.html
#定義網站網域名稱(需要先給相應的網站以網域名稱形式配置了nginx日誌,比如你的網域名稱.log)
DOMAIN=你的網域名稱
#定義前一天日期
DATE=`date +%Y-%m-%d -d "1 day ago"`
#定義日誌路徑
logfile=/home/wwwlogs/你的網域名稱_${DATE}.log
#定義死鏈檔案存放路徑
deathfile=/home/wwwroot/你的網域名稱/death.txt
#定義網站訪問地址
website=http://你的網域名稱
#②、Nginx日誌切割
mv ${LOGS_PATH}/${DOMAIN}.log ${LOGS_PATH}/${DOMAIN}_${DATE}.log
kill -USR1 `ps axu | grep "nginx: master process" | grep -v grep | awk '{print $2}'`
#可選功能: 自動刪除30天之前的日誌,可自行修改儲存時間長度。
cd ${LOGS_PATH}
find . -mtime +30 -name "*20[1-9][3-9]*" | xargs rm -f
#③、網站死鏈產生(百度專用)
#分析日誌並儲存死鏈資料
for url in `cat ${logfile} | grep -i "${UA}" | awk '{print $7 " " $9}' | grep " 404" | awk '{print $1}'`
do
grep "$url" ${deathfile} >/dev/null || echo ${website}${url} >>${deathfile}
done
②、其他WEB伺服器,比如 Apache 或 IIS,只要參考指令碼思路,修改成實際的路徑或日誌欄位,同樣可以寫一個相同功能的 Shell 或 Batch 指令碼,有需求的朋友自己去研究折騰吧!