shell实例利用crontab自动清除日志

程序运行会产生很多的日志,对于无用的日志手动删除比价麻烦,写一个自动执行的命令是很有必要的。

删除文件shell命令

find 对应目录 -mtime +天数 -name "文件名" -exec rm -rf {} \;

具体的命令如下:

  find /mnt/tomcat/logs/ -mtime +35 -name "*.log" -exec rm -rf {} \;

参数及说明:

整句的作用是将 /mnt/tomcat/logs/目录下所有30天前带".log"的文件删除。

find:linux的查找命令,定位文件夹;

/mnt/tomcat/logs/:需要清理的目录;

-mtime:语法结构,固定写法;

+30:天数;

"*.log":*是匹配所有,整个是匹配所有的后缀为.log的文件;

-exec:语法结构,固定写法;

rm -rf:强制循环删除文件,及文件夹;

{} \; :语法结构,固定写法;

crontab计划任务使用

创建脚本文件:

#vi del-log.sh

切换到insert模式输入:

  #!/bin/sh

  find /mnt/tomcat/logs/ -mtime +35 -name "*.log" -exec rm -rf {} \;

授权:

chmod +x del-log.sh

增加系统计划任务:

crontab -e

11 11 * * * /mnt/tomcat/logs/del-log.sh >/dev/null 2>&1

这样每天11点11分系统就自动执行del-log.sh文件,即执行find /mnt/tomcat/logs/ -mtime +35 -name "*.log" -exec rm -rf {} \;语句,来对日志文件进行清理。

其他自动清除日志脚本

  1. #!/bin/sh
  2. ###########################
  3. #delete log blog.duplicatedcode.com
  4. # in_day_num: like 1 2 is delete 2day ago logs
  5. # in_log_path like tomcat log home
  6. ###########################
  7. in_log_path=${1}
  8. in_day_num=${2}
  9. tmp_delete_log=/var/log/deletelog/"`date +%Y%m`.log"
  10. deleteLog()
  11. {
  12. inner_num=${1}
  13.    #find log
  14.    echo "[`date`] >> start delete logs---" >> $tmp_delete_log
  15.    find ${in_log_path} -type f -mtime ${inner_num} -print0 | xargs -0 rm -rf
  16.    echo "[`date`] >> end delete logs---" >> $tmp_delete_log
  17. }
  18. init()
  19. {
  20.    mkdir -p /var/log/deletelog/
  21. }
  22. main()
  23. {
  24.    init
  25.    if [ -z ${in_log_path} ]; then
  26.        echo "[`date`] >> error log_path not init---" >> $tmp_delete_log
  27.        return
  28.    fi
  29.    inner_day_num=+7
  30.    if [[ -n ${in_day_num} ]] && [[ ${in_day_num} -ge 1 ]] ; then
  31.        ${inner_day_num}=${in_day_num}
  32. else
  33. ${inner_day_num}="+"${in_day_num}
  34.    fi
  35.    deleteLog ${inner_day_num}
  36. }
  37. #first run main
  38. main

其中可输入日志所在目录和删除时间(如数字1代表1天前),find -type f -print 时会根据换行或者空格来输出查找的文件,在不同的sh下有不同的反应,如果不做处理结合xargs 进行删除操作,会有影响,所以需要增加-print0用 null来作为边界符号,才敢结合 xargs -0来格式化输入。使用find 的时候 遵循最小结果集原则,find解析式从左到右,所有确保你在最左边的过滤符号能够过滤最大数据。
       该脚本可结合crontab进行自动部署清理日志,在/var/log/deltelog/ 生成按照月的清理日志记录。

Linux下自动清理/tmp文件夹的原理

Linux系统中/tmp文件夹里面的文件会被清空,至于多长时间被清空,如何清空的?
         在linux中tmpwatch命令的作用是删除一段时间内不使用的文件(removes files which haven’t been accessed for a period of time),在/etc/cron.daily/tmpwatc的计划任务中:

  1. #! /bin/sh
  2. flags=-umc
  3. /usr/sbin/tmpwatch "$flags" -x /tmp/.X11-unix -x /tmp/.XIM-unix \
  4. -x /tmp/.font-unix -x /tmp/.ICE-unix -x /tmp/.Test-unix \
  5. -X '/tmp/hsperfdata_*' 10d /tmp
  6. /usr/sbin/tmpwatch "$flags" 30d /var/tmp
  7. for d in /var/{cache/man,catman}/{cat?,X11R6/cat?,local/cat?}; do
  8. if [ -d "$d" ]; then
  9. /usr/sbin/tmpwatch "$flags" -f 30d "$d"
  10. fi
  11. done

tmpwatch参数

-a或–all  删除任何类型的文件。

-m或–mtime   根据文件被更改时间

-c或–ctime     根据文件更改状态时间

-M或–dirtime  根据文件夹被更改时间

-f或–force  强制删除文件或目录,其效果类似rm指令的”-f”参数。

-l  不删除符号链接

-U或–exclude-user=用户名或uid  排除某用户的文件

-x 或–exclude=path 排除某路径

-X 或–exclude-pattern=pattern 排除某规则下的路径

-q或–quiet  不显示指令执行过程。

-v或–verbose  详细显示指令执行过程。

-test  仅作测试,并不真的删除文件或目录。

第一行相当于一些标记(参数),第二行就是针对/tmp目录里面排除的目录,第三行,这是对这个/tmp目录的清理。
/usr/sbin/tmpwatch "$flags" 30d /var/tmp中30d是30天,系统自动清理/tmp文件夹的默认时限是30天,决定了30天清理/tmp下不访问的文件,若想一天一清理的话,把30d改成1d。
如果你设置更短的时间来清理的话,比如说是30分钟、10秒等,在这个文件中设置后,reboot后时间到了也不清理/tmp文件夹里面的内容,因为tmpwatch所在的位置是/etc/cron.daily/目录下,而这个目录是每天执行一次计划任务,所以就不起作用了。

总结

(1)crontab定时任务在文件清理方面又很大的应用,可以设置关机任务、启动脚本和一些程序的检测操作。

(2)清除日志可采用cat /dev/null > /var/lig/messages,可以防止rm -f导致的程序已经打开文件句柄无法正确释放日志文件和写入、文件显示磁盘空间未释放等问题。

shell实例利用crontab自动清除日志的更多相关文章

  1. 利用python自动清除Android工程中的多余资源

    我们直接在公司项目中使用,效果良好! 分享出脚本代码,希望对Android研发的同学有帮助. 提示,初学python,开发环境是Sublime Text 2,直接Ctrl+B的,其他环境下没调试过.应 ...

  2. Rails -- 自动清除日志

    在开发模式中,开发环境日志会越来越大,所以需要设置自动清理,省内存. 在 config/initializers中新建一个文件 clear_blog.rb 编写如下代码 if Rails.env.de ...

  3. 利用crontab自动更新SVN代码

    shell.sh#!/bin/sh source ~/.bash_profile LANG=en_US.UTF- cd /opt/web/hzcms/ svn up >> /opt/web ...

  4. 利用shell脚本实现nginx 的logs日志分割

    Nginx 是一个非常轻量的 Web 服务器,体积小.性能高.速度快等诸多优点.但不足的是也存在缺点,比如其产生的访问日志文件一直就是一个,不会自动地进行切割,如果访问量很大的话,将 导致日志文件容量 ...

  5. SQL2005自动备份,定期删除的维护计划及自动定期清除日志

    作为一名DBA,他们最常见的日常任务是: 1)定期完成数据库的完全备份或差异备份.2)定期清理备份文件,因为存储空间有限,可能只需要保存一个时期段内的文件(比如一周内或一月内). 而如何做到这两点呢? ...

  6. Linux下自动清除MySQL日志文件

    MySQL运行过程中会生成大量的日志文件,占用不少空间,修改my.cnf文件配置bin-log过期时间,在Linux下自动清除MySQL日志文件 [mysqld] expire-logs-days= ...

  7. shell清除日志小脚本

    #!/bin/bash #清除日志脚本 LOG_DIR=/var/log ROOT_UID=0 #用户id为0的 ,即为root if [ "$UID" -ne "$RO ...

  8. (转)shell实例手册

    原文地址:http://hi.baidu.com/quanzhou722/item/f4a4f3c9eb37f02d46d5c0d9 实在是太好的资料了,不得不转 shell实例手册 0说明{ 手册制 ...

  9. shell 实例

    转载自:https://github.com/liquanzhou/ops_doc    这里只作为笔记使用,不做他用 shell实例手册 0 说明{ 手册制作: 雪松 更新日期: 2018-09-1 ...

随机推荐

  1. jquery花式图片库——jqFancyTransitions

    http://www.html580.com/3785 https://yq.aliyun.com/ziliao/4390 使用方法调用插件js文件: <script src="js/ ...

  2. java实现将包含多个<REC>的文件拆成若干只包含一个<REC>的文件

    遍历文件夹里的文件,将包含多个<REC>的文件拆成若干只包含一个<REC>的文件 package com.prepub; import java.io.BufferedRead ...

  3. curl get方式

    提交数据到https时,需要pem证书来加密.我们使用浏览器访问https的时候,浏览器会自动加载网站的安全证书进行加密.但是你用curl请求https时,没有通过浏览器,就只有自己手动增加一个安全证 ...

  4. C#入门课程之基础认识

    命名规则: 注意变量名的第一个字符必须是字母.下划线.以及@字符 字面值: 字符串字面值: 用Unicode表示一个字符方式:\uxxxx,其中xxxx表示4位的十六进制数,下面两种表示方式一致: u ...

  5. CentOS7+CDH5.14.0安装全流程记录,图文详解全程实测-3禁止交换和禁用大页面

    1.禁止交换(每台机器都要做): 执行命令:vim /etc/sysctl.conf 增加一行:vm.swappiness=0 执行命令:sudo sysctl vm.swappiness=0 2.禁 ...

  6. 浅谈spring为什么推荐使用构造器注入

    转载自: https://www.cnblogs.com/joemsu/p/7688307.html 一.前言 ​ Spring框架对Java开发的重要性不言而喻,其核心特性就是IOC(Inversi ...

  7. Checked Uncheckd异常

    Checked : 你可以在写代码的时候就throw 或者try catch 的 Unchecked :  Error   + RuntimeException .提前无法预测的 http://www ...

  8. Oracle lag()/lead() over()分析函数

    with tmp as(select '1' id ,'aa' name ,'22' age from dual union allselect '2' id ,'bb' name ,'20' age ...

  9. Failed to create agent because it is not close enough to the NavMesh

    主要原因是:两个相同对象navmesh点太近造成. 解决方案:通过NavMesh.SamplePosition 获得可以行走点 ;i<;i++) { , mRadius); , 3.14f); ...

  10. MySQL索引优化步骤总结

    在项目使用mysql过程中,随着系统的运行,发现一些慢查询,在这里总结一下mysql索引优化步骤 1.开发过程优化 开发过程中对业务表中查询sql分析sql执行计划(尤其是业务流水表),主要是查看sq ...