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 腳本,有需求的朋友自己去研究折騰吧!