1.编写备份文件

创建文件logs_backup.sh,内容如下:

#!/bin/bashexport PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/usr/lib/jvm/java-8-oracle/bin:/usr/lib/jvm/java-8-oracle/db/bin:/usr/lib/jvm/java-8-oracle/jre/binfind /home/www/log/java-app/ -mtime +1 -name "*.gz" -exec cp {} /koala/java-app/foundation8/logs \;find /home/www/log/java-app -mtime +1 -name "*.gz" -exec rm -rf {} \;

将当前一天前的以gz结尾的文件备份到/koala/java-app/foundation8/logs目录下,再全部删除这些文件。-mtime +1是查找一天之前的文件,比如现在是2019年7月29日16点,那么-mtime +1的时间就是2019年7月28日16点之前的时间。

2.设置定时任务:

使用crontab -e命令编辑定时任务

00 2 * * * /bin/bash /koala/java-app/foundation6/shell/logs_backup.sh

这句话的含义是:每天凌晨2点执行备份脚本logs_backup.sh

使用crontab -l命令可以查看我们要执行的定时任务。

补充:

1.将用户的访问日志处理成访问请求结果和请求路径形式:

用户访问nginx的日志格式如下:

60.165.182.107 60.165.182.0 http://server.www.koalareading.com - [27/Jul/2019:23:59:28 +0800] "GET /books/android/spellwords/sortSpellWordsGames?challengeType=1&schoolClassId=137987&sortType=1 HTTP/1.1" 200 0.060 3414 "-" "okhttp/3.8.1" 127.0.0.1:8082 - - SESS=yzj3i9EnGzfs1vLy2DAlLkrYMgc6Y5IJ4SMemwiEYngDxCDbF9YlmXI5mN8vOnI0/R+6ZO+kTAf3Lb8M5VBkgVGaMXoHq5r5RFhzN1v5S1U=39.154.5.193 39.154.5.0 http://server.www.koalareading.com - [27/Jul/2019:23:59:28 +0800] "GET /users/android/user/current HTTP/1.1" 200 0.037 990 "-" "okhttp/3.8.1" 127.0.0.1:8081 - - SESS=yzj3i9EnGzfs1vLy2DAlLkrYMgc6Y5IJ4SMemwiEYnipo67uQux2uWb4/P9bfEtkYGDcLVXFSsiQDTeHkM5diohha0SFPWYxcdwXcqC2nhY=39.154.5.193 39.154.5.0 http://server.www.koalareading.com - [27/Jul/2019:23:59:28 +0800] "GET /store/web/clothing/mine?gender=1&userId=5264542 HTTP/1.1" 200 0.026 425 "https://www.koalareading.com/userspace/door?userId=5264542" "Mozilla/5.0 (Linux; Android 8.1.0; CLT-AL00 Build/HUAWEICLT-AL00; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/66.0.3359.126 MQQBrowser/6.2 TBS/044807 Mobile Safari/537.36Android/koalastudent/4100" 127.0.0.1:8089 - - zg_did=%7B%22did%22%3A%20%22167e9a414720-07fcc31a077f-6c4a693f-41a78-167e9a4147483%22%7D; SESS=yzj3i9EnGzfs1vLy2DAlLkrYMgc6Y5IJ4SMemwiEYnipo67uQux2uWb4/P9bfEtkYGDcLVXFSsiQDTeHkM5diohha0SFPWYxcdwXcqC2nhY=; zg_fba17a2135f54785aa88d686272386e4=%7B%22sid%22%3A%201564241675704%2C%22updated%22%3A%201564243167846%2C%22info%22%3A%201564241675714%2C%22superProperty%22%3A%20%22%7B%7D%22%2C%22platform%22%3A%20%22%7B%7D%22%2C%22utm%22%3A%20%22%7B%7D%22%2C%22referrerDomain%22%3A%20%22%22%2C%22zs%22%3A%200%2C%22sc%22%3A%200%2C%22firstScreen%22%3A%201564241675704%7D182.51.86.38 182.51.86.0 http://server.www.koalareading.com - [27/Jul/2019:23:59:28 +0800] "GET /tasks/android/readingTasks/student/getPracticeByType?size=10&pageNo=0&type=0 HTTP/1.1" 200 0.022 103 "-" "okhttp/3.8.1" 127.0.0.1:8083 - - SESS=yzj3i9EnGzfs1vLy2DAlLkrYMgc6Y5IJ4SMemwiEYngCb7AYWY2yagL90LZU4qbKS5UN19TYIVLLQvTYMctvCll4o6+AWJgWh/x1hHctvIs=124.238.24.129 124.238.24.0 http://server.www.koalareading.com - [27/Jul/2019:23:59:28 +0800] "GET /settings/android/serverStatus/maintainPrediction HTTP/1.1" 200 0.004 83 "-" "okhttp/3.8.1" 127.0.0.1:8088 - - SESS=yzj3i9EnGzfs1vLy2DAlLkrYMgc6Y5IJ4SMemwiEYni5PE+/l8bUGi4SpH06EWIBvGvShy89XDXS3HN2jUTfvpdUQCNk1tInmpBfe2k6QS8=

现在需要处理成这样的格式:

200 /books/web/readResource/checkPraise?articleId=12722&type=7

其中第一列是响应码,第二列是请求路径。

可以使用下面的脚本:

awk '($10 ~ /401|403|404|500||502|503|504|200/)' access.log-`date -d "yesterday" +"%Y%m%d"` | awk '{print $10,$8}' > data.log

2.获取用户请求每个状态值的请求数量

比如我现在有这样格式的日志文件:data.log200 /users/android/join/checkJoinClassRequest200 /books/android/home/3/list200 /books/android/bannerVip/list?moduleType=4200 /users/android/vip/pay/queryOrder?outTradeNo=91156372468445200 /tasks/android/advance/selfStudentTasks/queryErTestProgress200 /tasks/android/teacher-app/new/class/task/list?classId=1727&startCount=0&count=10&history=1200 /users/android/vip/getVipLevel200 /tasks/android/advance/selfStudentTasks/querySelfErTestStatus200 /users/android/user/clientid/saveOrUpdate?plat=ANDROID&clientId=27321a7a5098fd4e6560261fa41e49bf&deviceType=Other200 /users/android/user/clientid/saveOrUpdate?plat=ANDROID&clientId=CN_7f5be5371b514b65146638f62bf3775f&deviceType=Oppo200 /messages/android/student/list?type=1200 /books/android/fm/albums/editPlayCount/d3a82aae795e4349895f2cf9024d9a06/FfctJrATes8xy9NtGSoCrh94XVBaNb3d200 /store/android/signIn/1200 /users/android/user/clientid/saveOrUpdate?deviceType=Other&plat=ANDROID&clientId=1d69389b0e5c9f2c50dc2b1c2a9985fa200 /users/android/user/clientid/saveOrUpdate?plat=ANDROID&clientId=c3599c2b3ca13459d1fb4bd50a88f774&deviceType=Other200 /books/web/readResource/article?type=7&articleId=12722200 /books/web/readResource/checkPraise?articleId=12722&type=7

其中第一列是请求响应码,第二列是每个path的请求路径和参数,books是请求的项目名称

可以使用如下脚本统计:

#!/bin/shLOGPATH=data.logecho "###########################course########################################"project_6=courseecho -e $project_6 status 200 = `cat $LOGPATH |grep $project_6 |awk '($1 ~ /200/)' |wc -l`echo -e $project_6 status 401 = `cat $LOGPATH |grep $project_6 |awk '($1 ~ /401/)' |wc -l`echo -e $project_6 status 403 = `cat $LOGPATH |grep $project_6 |awk '($1 ~ /403/)' |wc -l`echo -e $project_6 status 404 = `cat $LOGPATH |grep $project_6 |awk '($1 ~ /404/)' |wc -l`echo -e $project_6 status 499 = `cat $LOGPATH |grep $project_6 |awk '($1 ~ /499/)' |wc -l`echo -e $project_6 status 500 = `cat $LOGPATH |grep $project_6 |awk '($1 ~ /500/)' |wc -l`echo -e $project_6 status 502 = `cat $LOGPATH |grep $project_6 |awk '($1 ~ /502/)' |wc -l`echo -e $project_6 status 503 = `cat $LOGPATH |grep $project_6 |awk '($1 ~ /503/)' |wc -l`echo -e $project_6 status 504 = `cat $LOGPATH |grep $project_6 |awk '($1 ~ /504/)' |wc -l`

释义:awk '($1 ~ /200/) 是找出第一列等于200的数据,wc -l统计行数(还有中说法是统计newline数)。

3.每天晚上定时的将nginx访问日志备份到指定目录:

创建脚本log_hebing.sh,内容:

#!/bin/bash/bin/cat /var/log/nginx/access.log-`date -d "yesterday" +"%Y%m%d"`>> /koala/java-app/logs_Calculation/access.log-`date -d "yesterday" +"%Y%m%d"`

设置每天晚上定时执行的任务,在crontab里面添加定时任务:

30 2 * * * /koala/shell/log_hebing.sh

每天晚上2点半定时执行log_hebing.sh脚本

4.编写查询日志的脚本

脚本内容如下:

#!/bin/bashecho "要查询的日志路径是:"$1echo "输入关键字是:"$2path=$1keyword=$2if [ "${path##*.}" == log ]; thengrep -C 20 "$keyword" $pathelif [ "${path##*.}" == gz ]; thenzcat $path | grep --binary-file=text "$keyword" -C 20elseecho "输入路径格式不合法"fi

释义:传入的参数是两个,第一个是日志的完整路径,第二个是关键字,根据传入的路径后缀,判断是当天的日志(以log结尾),还是之前的日志(已经被压缩,log,gz结尾),使用不同的查看日志命令

使用示例如下:

./grep_log.sh /koala/java-app/foundation8/logs/koala-course.2019-07-23.0.log.gz E20190723142318060100017

shell定时备份文件相关推荐

  1. mysql 定长文件_mysql 定时备份文件 参考文档

    i_定时备份文件mysql 在cd /home下创建test [root@oracle01 test]# find /kingsql/ -name mysqldump(mysqldump的绝对路径) ...

  2. php定时删除目录,shell定时删除指定目录下的文件

    contab -e 10 */12 * * * sh /usr/local/apache2/htdocs/cakephp/ebook/webroot/php/delete_big_log.sh 代码: ...

  3. Linux下定时备份文件

    一. 编写脚本 编写一个脚本文件,使脚本可以执行备份命令. 例如,将文件目录 /var/www/newhtml 备份到/var/www/backup/site目录下,并压缩. 创建脚本 命令格式: t ...

  4. 一天一个shell实例(3)定时备份文件(转)

    写一个备份文件的脚本,利用crontab定时执行. 步骤如下: 1,设置备份目的目录 2,进入目的目录 3,获取时间,设置备份文件名 4,备份文件 #!/bin/bash DIRNAME=`ls /r ...

  5. 【Linux环境】简单Shell脚本实现定时备份文件、压缩、删除超时文件操作(showDoc文件备份脚本举例)

    Shell脚本备份数据的博文不少,这个应该算是比较简单的,没有复杂逻辑,分享一下. 1.备份脚本 Shell脚本的每行命令一定要在测试环境进行测试,否则会有意想不到的惊吓

  6. 使用shell定时自动备份mysql数据库

    #!/bin/bashid="root" #用户名 pwd="123456" #密码 dbs="blog.ewsd.cn dangjian.ewsd. ...

  7. linux定时备份文件到指定文件夹,Linux定时备份数据库到指定邮箱的方法

    一.配置邮箱 这里使用的是网易邮箱126邮箱的STMP服务,服务器是smtp.126.com.如果你使用其它第三方邮箱,在帐号设置那里一般都有说明SMTP服务器地址. 如果你的Ubuntu没有安装ma ...

  8. shell 定时删除制定目录下过期文件

    一.概述 编写shell脚本 设置定时任务 二.编写 shell 脚本 1.格式如下: find  ~/RecycleBin  -mtime   +10   -name   "*" ...

  9. 阿里云OSS定时备份文件并定时删除过时文件

    说明 1.该文章说明了如何使用oss保存备份文件并定期删除 2.使用oss是因为价格低廉,并且服务器的存储空间有限,备份文件按日期不断叠加,容易撑爆服务器存储空间,所以直接上传到oss上保存 3.在上 ...

最新文章

  1. 盘点几个开源的高仿项目,B站最像~
  2. java pdf表单域实现_Java 创建PDF表单域 - 文本框、复选框、列表框、组合框、按钮等...
  3. centos 6.3安装libmcrypt-2.5.8不成功解决方案
  4. QML工作笔记-Key Element的使用
  5. C++ STL list排序
  6. script标签中defer和async的区别
  7. 《Cracking the Coding Interview》——第3章:栈和队列——题目4
  8. oracle中not or 用法
  9. K8s-Demo实现
  10. CSS3 blur滤镜实现
  11. 安装matlab7.0步骤,Matlab 7.0 安装指导
  12. linux低级格式化工具下载,Hard Disk Low Level Format Tool下载-硬盘低级格式化工具 v2.37 官方版 - 下载吧...
  13. Java常见异常总结
  14. DLAN(UPNP)主流开源库的官网及SDK下载地址
  15. 什么叫运营---一个人,一张网,一艘船,独钓寒江雪!
  16. ESP32 Uart串口控制器
  17. 开发一款APP软件,需要哪些技术支持呢?
  18. 音视频技术之《移动直播秒开优化经验》
  19. 5g的八大关键指标_5G的七大关键性能指标5G对生活的改变新5G时代的来临身边巨变...
  20. 通知:首届CISM大赛华东赛区决赛将于30日在马鞍山举行

热门文章

  1. U盘插入有盘符无容量
  2. ALPHA_101因子(基础函数)
  3. 袁峰:我的程序开发之路
  4. 广州市有没有学计算机软件编程,广州软件学院,推荐给中低分段想学编程的考生...
  5. Java实现代码计时功能(Spring计时工具类--StopWatch学习总结)
  6. 2017年湖北一季度太阳能发电4.24亿千瓦时 增长185.61%
  7. C++按列读取txt文件并保存,替代excel处理
  8. ss fping.php,WordPress wpSS插件'ss_handler.php' SQL注入漏洞
  9. free获取发明专利
  10. Sentinel(四)限流算法-令牌桶算法