zoukankan      html  css  js  c++  java
  • Linux后台日志定时清理脚本

    Linux后台日志定时清理脚本

     

    一、 简介

      linux是一个很能自动产生文件的系统,日志、邮件、备份等。虽然现在硬盘廉价,我们可以有很多硬盘空间供这些文件浪费,让系统定时清理一些不需要的文件很有一种爽快的事情。不用你去每天惦记着是否需要清理日志,不用每天收到硬盘空间不足的报警短信,想好好休息的话,让我们把这个事情交给机器定时去执行吧。

    二、 分析日志

    查看日志路径和日志命名规则:

    要清理这个目录下面如此命名规则的日志。

    三、方法

    这时我想的肯定是希望能写一个脚本把这些日志清除掉,但不是删除掉。那么现在需要实现3步:

             1.找到所有项目的log的位置

             2.清除或者删除log内容

             3.定时执行脚本

    删除和清空日志命令:

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

    实例命令:

    find /opt/soft/log/ -mtime +7 -name "*.log" -exec rm -rf {} \;

    说明:

    将/opt/soft/log/目录下所有7天前带".log"的文件删除。具体参数说明如下:

    find:linux的查找命令,用户查找指定条件的文件;

    /opt/soft/log/:想要进行清理的任意目录;

    -mtime:标准语句写法;

    +7:查找7天前的文件,这里用数字代表天数;

    "*.log":希望查找的数据类型,"*.jpg"表示查找扩展名为jpg的所有文件,"*"表示查找所有文件,这个可以灵活运用,举一反三;

    -exec:固定写法;

    rm -rf:强制删除文件,包括目录;

    {} \; :固定写法,一对大括号+空格+\+;

    清空方法:

    find /opt/soft/log/ -mtime +7 -name "*.log" -type f -print -exec truncate -s 0 {} \;    ->将符合这样一个条件的文件查到出来并赋予它0M的大小。

    -type f -print: 将符合的文件打印出来

    truncate -s 0 aa.txt:意思是将aa.txt的大小变成0M,即把aa.txt的内容清空了。可以百度truncate的用法。

    四、编写shell脚本

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    #!/bin/bash
     
    status(){
      date
      find /var/log/ -mtime +3 -name 'gc*.log' -type f -print -exec rm -rf {} \;
      echo "删除zeus job webIndex gc log成功"
      date
      find /var/log/ -mtime +3 -name 'info.log.*' -type f -print -exec truncate -s 0 {} \;
      echo "清空zeus job webIndex info log成功"
      date
      find /var/log/ -mtime +3 -name 'error.log.*' -type f -print -exec truncate -s 0 {} \;
      echo "清空zeus job webIndex error log成功"
      date
      find /var/log/ -mtime +3 -name 'wrapper.log.*' -type f -print -exec truncate -s 0 {} \;
      echo "清空zeus job webIndex wrapper log成功"
      return
    }
     
    case "$1" in
        status)
            status;;*)
                echo "清除失败"
    esac 

    添加执行权限:chmod 755 clearlog.sh 

    五、定时任务

      常用命令:

       crontab -l    :查看定时任务

       crontab -e    :添加任务

       crontab -r   :删除任务

       cat  /etc/crontab    :查看crontab文件

        现在我们来添加一条任务:

         59 23 * * * /var/local/clearlog.sh status >>/var/local/clear.txt   

        :每天23:59执行脚本并输出到clear.txt文件 ,定时任务的写法:*(分)  *(时) *(日) *(月) *(周) 

    大功告成!

    六、附赠

    附录一下所有job时间格式:

    基本格式 : 
    *  *  *  *  *  command 
    分 时 日 月 周 命令 
    第1列表示分钟1~59 每分钟用*或者 */1表示 
    第2列表示小时1~23(0表示0点) 
    第3列表示日期1~31 
    第4列表示月份1~12 
    第5列标识号星期0~6(0表示星期天) 
    第6列要运行的命令 
    crontab文件的一些例子: 
    30 21 * * * /usr/local/etc/rc.d/lighttpd restart 
    上面的例子表示每晚的21:30重启apache。 
    45 4 1,10,22 * * /usr/local/etc/rc.d/lighttpd restart 
    上面的例子表示每月1、10、22日的4 : 45重启apache。 
    10 1 * * 6,0 /usr/local/etc/rc.d/lighttpd restart 
    上面的例子表示每周六、周日的1 : 10重启apache。 
    0,30 18-23 * * * /usr/local/etc/rc.d/lighttpd restart 
    上面的例子表示在每天18 : 00至23 : 00之间每隔30分钟重启apache。 
    0 23 * * 6 /usr/local/etc/rc.d/lighttpd restart 
    上面的例子表示每星期六的11 : 00 pm重启apache。 
    0 */1 * * * /usr/local/etc/rc.d/lighttpd restart 
    每一小时重启apache 
    0 23-7/1 * * * /usr/local/etc/rc.d/lighttpd restart 
    晚上11点到早上7点之间,每隔一小时重启apache 
    0 11 4 * mon-wed /usr/local/etc/rc.d/lighttpd restart 
    每月的4号与每周一到周三的11点重启apache 
    0 4 1 jan * /usr/local/etc/rc.d/lighttpd restart 
    一月一号的4点重启apache 
    名称 : crontab 
    使用权限 : 所有使用者 
    使用方式 : 
    crontab file [-u user]-用指定的文件替代目前的crontab。 
    crontab-[-u user]-用标准输入替代目前的crontab. 
    crontab-1[user]-列出用户目前的crontab. 
    crontab-e[user]-编辑用户目前的crontab. 
    crontab-d[user]-删除用户目前的crontab. 
    crontab-c dir- 指定crontab的目录。 
    crontab文件的格式:M H D m d cmd. 
    M: 分钟(0-59)。 
    H:小时(0-23)。 
    D:天(1-31)。 
    m: 月(1-12)。 
    d: 一星期内的天(0~6,0为星期天)。 
    cmd要运行的程序,程序被送入sh执行,这个shell只有USER,HOME,SHELL这三个环境变量 
    说明 : 
    crontab 是用来让使用者在固定时间或固定间隔执行程序之用,换句话说,也就是类似使用者的时程表。-u user 是指设定指定 
    user 的时程表,这个前提是你必须要有其权限(比如说是 root)才能够指定他人的时程表。如果不使用 -u user 的话,就是表示设 
    定自己的时程表。 
    参数 : 
    crontab -e : 执行文字编辑器来设定时程表,内定的文字编辑器是 VI,如果你想用别的文字编辑器,则请先设定 VISUAL 环境变数 
    来指定使用那个文字编辑器(比如说 setenv VISUAL joe) 
    crontab -r : 删除目前的时程表 
    crontab -l : 列出目前的时程表 
    crontab file [-u user]-用指定的文件替代目前的crontab。 
    时程表的格式如下 : 
    f1 f2 f3 f4 f5 program 
    其中 f1 是表示分钟,f2 表示小时,f3 表示一个月份中的第几日,f4 表示月份,f5 表示一个星期中的第几天。program 表示要执 
    行的程序。 
    当 f1 为 * 时表示每分钟都要执行 program,f2 为 * 时表示每小时都要执行程序,其馀类推 
    当 f1 为 a-b 时表示从第 a 分钟到第 b 分钟这段时间内要执行,f2 为 a-b 时表示从第 a 到第 b 小时都要执行,其馀类推 
    当 f1 为 */n 时表示每 n 分钟个时间间隔执行一次,f2 为 */n 表示每 n 小时个时间间隔执行一次,其馀类推 
    当 f1 为 a, b, c,... 时表示第 a, b, c,... 分钟要执行,f2 为 a, b, c,... 时表示第 a, b, c...个小时要执行,其馀类推 
    使用者也可以将所有的设定先存放在档案 file 中,用 crontab file 的方式来设定时程表。 
    例子 : 
    #每天早上7点执行一次 /bin/ls : 
    0 7 * * * /bin/ls 
    在 12 月内, 每天的早上 6 点到 12 点中,每隔3个小时执行一次 /usr/bin/backup : 
    0 6-12/3 * 12 * /usr/bin/backup 
    周一到周五每天下午 5:00 寄一封信给 alex@domain.name : 
    0 17 * * 1-5 mail -s "hi" alex@domain.name < /tmp/maildata 
    每月每天的午夜 0 点 20 分, 2 点 20 分, 4 点 20 分....执行 echo "haha" 
    20 0-23/2 * * * echo "haha" 
    注意 : 
    当程序在你所指定的时间执行后,系统会寄一封信给你,显示该程序执行的内容,若是你不希望收到这样的信,请在每一行空一格之 
    后加上 > /dev/null 2>&1 即可 
    例子2 : 
    #每天早上6点10分 
    10 6 * * * date 
    #每两个小时 
    0 */2 * * * date 
    #晚上11点到早上8点之间每两个小时,早上8点 
    0 23-7/2,8 * * * date 
    #每个月的4号和每个礼拜的礼拜一到礼拜三的早上11点 
    0 11 4 * mon-wed date 
    #1月份日早上4点 
    0 4 1 jan * date 
    范例 
    $crontab -l 列出用户目前的crontab.

    为人:谦逊、激情、博学、审问、慎思、明辨、 笃行
    学问:纸上得来终觉浅,绝知此事要躬行
    为事:工欲善其事,必先利其器。
    态度:道阻且长,行则将至;行而不辍,未来可期
    转载请标注出处!
  • 相关阅读:
    go函数
    Linux 查看磁盘容量、查找大文件、查找大目录
    五分钟理解一致性哈希算法(consistent hashing)
    使用Java实现三个线程交替打印0-74
    Python实现IOC控制反转
    Wannafly挑战赛5 A珂朵莉与宇宙 前缀和+枚举平方数
    Yandex Big Data Essentials Week1 Scaling Distributed File System
    Yandex Big Data Essentials Week1 Unix Command Line Interface Processes managing
    Yandex Big Data Essentials Week1 Unix Command Line Interface File Content exploration
    Yandex Big Data Essentials Week1 Unix Command Line Interface File System exploration
  • 原文地址:https://www.cnblogs.com/ios9/p/15785162.html
Copyright © 2011-2022 走看看