`
wen866595
  • 浏览: 268894 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

博客维护脚本

 
阅读更多

 

文章首先发表在 码蜂笔记 http://coderbee.net/index.php/notes/20130803/372

 

 

我博客维护脚本的功能主要:启动、停止博客(MySQL、PHP-FPM、Nginx),数据库数据和访问日志打包备份、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加入防火墙黑名单

这个脚本是最近添加的,主要是把那些访问日志里4xx状态、访问的URL看起来是恶意的IP加入防火墙过滤掉。由cron没小时调度执行一次。

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

cron调度

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://coolshell.cn/articles/5426.html,练了两个星期才基本上上手。

 

关于博客搭建过程可见: http://coderbee.net/index.php/notes/20130620/254

 

0
0
分享到:
评论

相关推荐

    AIX 查看HA脚本位置

    在描述中提到的"博文链接:https://dbzone.iteye.com/blog/575252"可能是一个关于AIX HA脚本实践的博客文章,但由于链接无法直接访问,我们只能根据通常的AIX HA实践来讨论相关知识点。 首先,AIX的HA解决方案通常...

    asp.net脚本博客系统

    【ASP.NET脚本博客系统详解】 ASP.NET是微软公司推出的一种用于构建Web应用程序的框架,它基于.NET Framework,提供了一种高效、安全且易于维护的平台来开发动态网站。在这个"asp.net脚本博客系统"中,我们主要探讨...

    JH iOS项目框架脚本

    在描述中提到的链接(http://blog.csdn.net/gauss_li/article/details/51064379)提供了详细的使用教程和脚本解析,开发者可以通过阅读这篇博客文章来了解如何定制和执行这个脚本。 使用这样的脚本有以下几个好处:...

    jsp+mysql博客系统含数据库脚本和源码

    【标题】"jsp+mysql博客系统含数据库脚本和源码"所涉及的知识点主要集中在Web开发领域,尤其是Java服务器页面(JSP)技术、Servlet和MySQL数据库的使用上。这个项目是一个完整的博客系统实现,提供了数据库脚本和源...

    [JWFD开源工作流]嵌入式脚本引擎的一些应用

    6. **最佳实践**:可能还会提供一些最佳实践,指导开发者如何编写高效、可维护的脚本,以及如何设计可复用的工作流逻辑。 【标签】:“源码 工具” 这两个标签表明这篇博文可能涉及了源码级别的细节,适合有一定...

    自己编写的脚本

    2. 脚本设计原则:解释如何规划脚本的结构,使其可读、可维护和可扩展。 3. 错误处理与调试:讨论如何添加错误处理机制,以及调试技巧。 4. 自动化任务:展示如何利用脚本自动化日常重复工作,例如文件备份、数据...

    Mongodb数据库安装脚本

    总的来说,MongoDB的安装脚本是实现自动化部署的重要工具,它们可以极大地简化安装和维护工作。通过理解这些脚本的工作原理,用户不仅可以快速部署MongoDB,还能更好地管理和优化自己的数据库环境。

    unity 脚本学习资料

    5. 查阅资料:利用网络资源,如论坛、博客、教程等,寻找更多学习资料和解决问题的方法。 尽管Unity现在更倾向于使用C#,但通过学习Unity中的JavaScript,你可以更好地理解游戏开发的基本原理,并为过渡到C#打下...

    SQL Server自动备份脚本 bat

    在描述中提到了一个博客链接,虽然具体内容没有提供,但可以推测该博客可能详细介绍了如何创建和使用这种批处理脚本。通常,创建SQL Server自动备份脚本会涉及以下几个步骤: 1. **编写T-SQL备份命令**:使用`...

    ermp项目oracle脚本

    综上所述,ERMP项目可能是一个包含复杂数据库结构和业务逻辑的企业级应用,Oracle脚本是其核心组成部分,用于构建和维护数据库。开发者或数据库管理员需要熟悉Oracle SQL语法,了解如何编写和执行脚本,同时还需要...

    cdh及其组件安装的shell脚本集合

    【描述】"对应博客使用的脚本"表明这些Shell脚本可能是某篇技术博客的配套资源,旨在辅助读者理解和实践CDH的部署。通常,这样的博客会详细介绍每个脚本的作用和使用方法,帮助初学者快速上手。 【标签】"CDH"是...

    windows删除临时文件脚本

    标题中的“Windows删除...总的来说,这个主题涵盖了批处理脚本的创建和使用,Windows系统的临时文件管理,以及如何利用脚本自动化日常维护任务。了解和应用这些知识可以帮助用户更有效地管理和优化他们的Windows系统。

    SpringBoot+Vue博客管理系统包含mysql数据库脚本文件.zip

    在"SpringBoot+Vue博客管理系统"中,数据库脚本可能包含了创建用户表、文章表、评论表等关键数据模型的SQL语句。 项目的源代码结构如"blog-vue-springboot-master"所示,这表明项目分为前后端两个主要部分。前端...

    QTP中VBS语言脚本介绍

    3. Keyword-driven测试:QTP支持关键字驱动测试,通过VBS调用内置或自定义的函数库,将测试逻辑与脚本分离,提高脚本的可读性和维护性。 4. Record and Playback:QTP的录制功能会自动生成VBS脚本,提供了一个快速...

    引入JavaScript脚本代码到HTML文档中

    这篇博客“引入JavaScript脚本代码到HTML文档中”将探讨如何将JS代码整合到HTML页面,以便实现网页的交互功能。 首先,JavaScript的引入方式主要有三种:内联方式、内部脚本方式和外部脚本方式。 1. 内联方式:这...

    mysql省市区脚本

    描述中提到的“博文链接:https://chenzheng8975.iteye.com/blog/2147562”,虽然具体内容没有给出,但可以推测这是一个ITeye博客上的文章,作者分享了关于如何创建和使用MySQL省市区脚本的详细步骤或最佳实践。...

    sql脚本02

    标题“sql脚本02”表明这是一个关于SQL脚本...同时,了解如何编写和维护SQL脚本也是提升数据库管理效率的关键技能。如果你能够熟练掌握并运用这些知识,无论是在开发、运维还是数据分析的角色中,都能发挥巨大的作用。

    强制关闭tomcat sh脚本

    在阅读博客文章《https://lym6520.iteye.com/blog/2157690》时,你可能会了解到具体的`shutdown-force.sh`脚本是如何实现这些步骤的,包括可能用到的具体命令行参数和逻辑控制结构。这个脚本可以作为一个自定义工具...

    Maven+SSM的博客系统源码和系统设计文档以及数据库脚本

    首先,我们来解析项目的标题:"Maven+SSM的博客系统源码和系统设计文档以及数据库脚本"。这表明项目不仅包含了实现博客功能的源代码,还附带了系统设计文档,这对于理解系统架构和业务逻辑至关重要。同时,数据库...

Global site tag (gtag.js) - Google Analytics