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. WCF基础_使用svcutil.exe 工具来生成调用文件

    右键单击一个服务在浏览器中打开时,通常会有这么一段话: ServiceDemo 服务 已创建服务. 若要测试此服务,需要创建一个客户端,并将其用于调用该服务.可以使用下列语法,从命令行中使用 svcu ...

  2. freeswitch dialplan 基础

    freeswitch dialplan 基础 一.基础概念 dialplan 拨号方案 context 拨号表(块) extension  拨号去向 action  (拨号后执行的)动作 condit ...

  3. 网络赛 I题 Max answer 单调栈+线段树

    题目链接:https://nanti.jisuanke.com/t/38228 题意:在给出的序列里面找一个区间,使区间最小值乘以区间和得到的值最大,输出这个最大值. 思路:我们枚举每一个数字,假设是 ...

  4. Java 数据类型与运算符

    JAVA数据类型分基本(内置)数据类型和引用数据类型. 区别: 基本数据类型在被创建时,在栈上给其划分一块内存,将数值直接存储在栈上. 引用数据类型在被创建时,首先要在栈上给其引用(句柄)分配一块内存 ...

  5. Eclipse常用快捷键--摘录他人

    Eclipse常用快捷键 1几个最重要的快捷键 代码助手:Ctrl+Space(简体中文操作系统是Alt+/) 快速修正:Ctrl+1 单词补全:Alt+/ 打开外部Java文档:Shift+F2显示 ...

  6. jmeter在几个固定的字符串中,随机取其中之一的方法

    在测试过程中遇到上送字段必需是几个固定值中的一个, 使用读取文件中几个固定值,然后随机在这几个固定值中选择的办法解决问题 __CSVRead() CSV file to get values from ...

  7. Mapbox Studio Classic 闪退问题解决方案

    之前安装过Mapbox Studio Classic 0.38,好久没有用了,今天用的时候发现不停的闪退,经过一番折腾,发现删除 %USERPROFILE%\.mapbox-studio 目录下所有文 ...

  8. scrapy 爬取斗罗大陆漫画

    # -*- coding: utf-8 -*- import scrapy import json import os import urllib import time from scrapy.ht ...

  9. HTML-CSS背景渐进色

    一.分类 a>线性渐变:颜色沿着一条直线过度:从 左到右.从上到下等: b>径向渐变:圆形或椭圆形渐变,颜色不再沿着一条直线变化,而是从一个起点朝所有方向混合. 1.线性渐变语法: bac ...

  10. Texture转Texture2D

    private Texture2D TextureToTexture2D(Texture texture) { Texture2D texture2D = new Texture2D(texture. ...