ブログのメンテナンス
6633 ワード
文章はまず、コードハチのノートで発表します.
私のブログのメンテナンススクリプトの機能は主に、ブログ(MySQL、PHP-FPM、NRGIX)を起動し、停止し、データベースデータとアクセスログのバックアップ、Wordpressのファイルパッケージのバックアップ、悪意のスキャンしたIPをファイアウォールのブラックリストに参加し、人類訪問の記録をフィルタリングします.
私のVPSのシステムはUbuntu 12.04です.
ブログのスクリプトを開始、停止します.
startBlog.sh、このスクリプトは起動スクリプトに加えられています.もしVPSが再起動されたら、自動的にブログを起動します.
log=/home/coderbee/blog/startBlogLog.log
date >> $log
/usr/share/mysql/bin/mysql.server start && {
/usr/share/php5/sbin/php-fpm && {
/usr/share/nginx/sbin/nginx && echo "start blog ok" >> $log ||
echo "start nginx failed " >> $log ;
};
} || { echo "start mysql failed ." >> $log ; }
shutDownBlog.shは、この脚本は主にブログを作り始めたばかりの時に使います.今はほとんど使われていません./usr/share/mysql/bin/mysql.server stop 2>&1 >/dev/null
kill -quit `cat /usr/share/php5/var/run/php-fpm.pid` 2>&1 >/dev/null
/usr/share/nginx/sbin/nginx -s stop 2>&1 >/dev/null
データベースデータとアクセスログのバックアップパッケージ
cronday.shは、この脚本は毎朝のスケジュールで行われます.
export JAVA_HOME='/usr/share/jdk1.7.0_21'
export PATH=$PATH:$JAVA_HOME/bin
blog=/home/coderbee/blog/
bakDir=${blog}dataBak
# mysqldump , vpsBack.jar Dropbox,vpsBack.jar Dropbox API , 。
/usr/share/mysql/bin/mysqldump -u wpblog -p'password' blog > ${bakDir}/blog-bak.sql.tmp 2>/dev/null &&
mv ${bakDir}/blog-bak.sql.tmp ${bakDir}/blog-bak.sql &&
java -jar ${blog}vpsBack.jar upload vpsBak4coderbee/db/`date -d"yesterday" +"%Y%m%d"`/ ${bakDir}/blog-bak.sql &&
echo "backup sql to dropbox ok ."
# , 。
monDir=${bakDir}/weblog/$(date -d"yesterday" +"%Y")/$(date -d"yesterday" +"%m")
dayPath=$(date -d"yesterday" +"%d").log
[ -d "${monDir}" ] || mkdir -p ${monDir}
logDir=/usr/share/nginx/logs
# nginx 、 、
cd $logDir && cp access.log ${dayPath} && :> access.log &&
# nginx
kill -USR1 `cat /usr/share/nginx/logs/nginx.pid` &&
#
tar -czf "${dayPath}.tar.gz" "${dayPath}" &&
#
rm -f ${dayPath} && mv -f "${dayPath}.tar.gz" ${monDir} &&
chown -R coderbee:appgroup ${bakDir} && echo "backup web log down"
WordPressのファイルパッケージのバックアップ
cronweek.shは、このスクリプトはWordpressのファイルを包装し、Dropboxにアップロードします.ブログを書いてアップロードするマルチメディアとWordpressプラグインは普通このディレクトリの下に置くので、毎週一回バックアップします.
cd /var/www/
export JAVA_HOME="/usr/share/jdk1.7.0_21"
export PATH=$PATH:$JAVA_HOME/bin
fname="web-`date +"%Y%m%d" -d"yesterday"`.gz"
tar czf $fname wordpress/ &&
java -jar /home/coderbee/blog/vpsBack.jar upload vpsBak4coderbee/web/ $fname &&
rm $fname && echo "backup web done ."
人類訪問の記録を濾過する
まず私のnginxのログログフォーマットを言います.
'$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"';
例えばこれは一つです.
122.194.20.145 - - [03/Aug/2013:18:13:49 +0800] "GET /index.php/algorithm/20130801/343 HTTP/1.1" 200 10575 "http://news.dbanotes.net/newest" "Mozilla/5.0 (iPad; CPU OS 6_0_2 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A550 Safari/8536.25" "-"
これは簡単なログ処理スクリプトで、今日のブログ記事とトップページのアクセスログだけを処理して、User-Agentによってフィルタリングします.
log="/usr/share/nginx/logs/access.log"
awk -F"\"" '$2 ~ /(GET \/ HTTP.*)|(\/index.php\/[a-zA-Z]*\/[0-9]+\/[0-9]+ .*)|(\/html5\/[a-zA-Z0-9]+.html .*)/ && $6 !~/(http:\/\/|Java|robot|.com|Wget|PHP|Reeder|Spider|(^-$)|ips-agent|@)/ {print $0}' $log
また、refer統計によると:
. humanVisit.sh | awk -F"\"" '{print $2, $4}' | cut -d" " -f2,4 | sort -k 1 | uniq -c
アクセスが一番多いurl:
. humanVisit.sh | awk -F"\"" '{print $2}' | cut -d" " -f2 | sort | uniq -c
悪意のスキャンのIPをファイアウォールのブラックリストに参加します.
このスクリプトは最近追加されたもので、主にそれらのアクセスログの4 xx状態、訪問URLは悪意のあるIPをファイアウォールに追加してフィルタリングします.クロンでは時間のスケジュールなしに一回実行します.
ipfilter.sh
cd /home/coderbee/blog/
sortIps=sortIpx
# 4xx 、 URL admin|Admin|scripts php IP
awk -F'"' '$3~/4.. [0-9]+/ && $2 ~ /GET \/.*(admin|Admin|scripts).+(index|setup)\.php/ {print $0}' /usr/share/nginx/logs/access.log | awk '{print $1}' >> evilIP
sort evilIP | uniq > evilIP.tmp && mv evilIP{.tmp,}
iptables -F INPUT
# IP/24
cut -d. -f1-3 ips evilIP | sort | uniq > $sortIps
for i in $sortIps
do
while read line
do
if [[ ! -z $line ]]; then
ip=$line/24
iptables -t filter -I INPUT -s $ip -j DROP
fi
done < $i
done
rm $sortIps
クラウンスケジューリング1 0 * * * /home/coderbee/blog/cronday.sh 2>&1 >> /home/coderbee/blog/cronlog
1 4 * * 1 /home/coderbee/blog/cronweek.sh 2>&1 >> /home/coderbee/blog/cronlog
1 * * * * /home/coderbee/blog/ipfilter.sh 2>&1 >> /home/coderbee/blog/ipfilterlog
結び目ここには複雑で深いものはありません.基本的にはAWK処理テキスト、sort順序、uniq去重、cutフィルタフィールド、tarは包装圧縮、cronタイミングでスケジュールし、shellの命令条件で実行、コマンドコンビネーション、リダイレクトなどを行います.
これはこのLinuxシステムの強力な一つである.大量の簡単な基本命令を提供し、これらの命令をshellで結合することでより複雑で強力な機能を実現することができる.
私もLinux shellのもっと多い遊び方を探し続けます.できるだけ手作業を自動化に変えてください.
Linuxの下でshellを編集するには、まずコマンドラインのテキストエディタをマスターしなければなりません.普通はViです.以前はクールシェルのこの文章「簡明Vim練習級攻略」http://coderbee.net/index.php/notes/20130803/372によって、二週間ぐらい練習してから基本的に上手になりました.
ブログの構築過程について見られます.http://coolshell.cn/articles/5426.html.