zoukankan      html  css  js  c++  java
  • shell实例利用crontab自动清除日志

    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.   
    11. deleteLog()  
    12. {  
    13.     inner_num=${1}  
    14.    #find log  
    15.    echo "[`date`] >> start delete logs---" >> $tmp_delete_log  
    16.    find ${in_log_path} -type f -mtime ${inner_num} -print0 | xargs -0 rm -rf  
    17.    echo "[`date`] >> end delete logs---" >> $tmp_delete_log  
    18. }  
    19. init()  
    20. {  
    21.    mkdir -p /var/log/deletelog/  
    22. }  
    23. main()  
    24. {  
    25.    init  
    26.    if [ -z ${in_log_path} ]; then  
    27.        echo "[`date`] >> error log_path not init---" >> $tmp_delete_log  
    28.        return  
    29.    fi  
    30.    inner_day_num=+7  
    31.    if [[ -n ${in_day_num} ]] && [[ ${in_day_num} -ge 1 ]] ; then  
    32.        ${inner_day_num}=${in_day_num}  
    33.     else  
    34.         ${inner_day_num}="+"${in_day_num}  
    35.    fi  
    36.    deleteLog ${inner_day_num}  
    37. }  
    38. #first run main  
    39. 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导致的程序已经打开文件句柄无法正确释放日志文件和写入、文件显示磁盘空间未释放等问题。

  • 相关阅读:
    c++中利用宏定义简化for循环使用
    UVA1152- 枚举 /二分查找
    acm 模板
    Xwindow的文章
    编程语言博客
    csh与bash比较
    关于锁与并发的资料总结
    linux su和sudo命令的区别
    对Memcached使用的总结和使用场景
    iptables配置——NAT地址转换
  • 原文地址:https://www.cnblogs.com/taoxing/p/8267031.html
Copyright © 2011-2022 走看看