zoukankan      html  css  js  c++  java
  • linux 下使用crontab 定时打包日志并删除已被打包的日志

    crontab是和用户相关的,每个用户有自己对应的crontab 。

    cron是Linux下的定时执行工具,以下是重启/关闭等等的命令

    #/sbin/service crond start    //启动服务
    #/sbin/service crond stop     //关闭服务
    #/sbin/service crond restart  //重启服务
    #/sbin/service crond reload   //重新载入配置
    #/sbin/service crond status  //查看服务状态

    cron服务提供 crontab命令来设定cron服务的,以下是这个命令的一些参数与说明:

    crontab -u     设定某个用户的cron服务,一般root用户在执行这个命令的时候需要此参数
    crontab -l      
    列出某个用户cron服务的详细内容
    crontab -r     删除某个用户的cron服务
    crontab -e    
    编辑某个用户的cron服务

    设置定时的参数图:

    crontab特殊的符号说明:

      "*"  代表所有的取值范围内的数字。特别要注意哦!
      "/"  代表每的意思,如"*/5"表示每5个单位
      "-"  代表从某个数字到某个数字
      ","  分散的数字

    例如:

    30 21 * * *          表示每晚的21:30 
    45 4 1,10,22 * *       表示每月1、10、22日的4 : 45

    现在是正式代码, 压缩上一个月的日志,并把其删除

    在logs文件夹的同级目录下新建一个 .sh文件   例如:logzip.sh

    内容:

            echo "Please wait..."  
            m=`date -d "1 months ago" +%Y-%m`    #获取上个月的yyyy-mm格式的日期字符串
            m2=`date -d "1 months ago" +%Y%m`
            index=0
            f=`ls /home/hls/apache-tomcat-7.0.61/logs -1 -c`  #获取logs下文件列表( /home/hls/apache-tomcat-7.0.61/logs 是日志的所在的路径)
            for name in $f
            do
                    n=`expr "$name" : '.*([0-9]{4}-[0-9]{2}).*'`    #从文件名称中提取yyyy-mm格式日期
                    if [ "$n" != "" ] && [ "$n" = "$m" ]
                    then
                            f[$index]="/home/hls/apache-tomcat-7.0.61/logs/$name"    #logs文件夹下符合要求的文件名称放入数组
                    else
                            f[$index]=""
                    fi
                    (( index ++ ))
            done
            echo "$f"
            str=${f[@]}
            if [ "${#str}" -gt 0 ]       #如果大于 0
            then
            zip /home/hls/apache-tomcat-7.0.61/logs/$m2.zip  $str    #压缩数组中的文件为yyyymm.zip文件,打包放在logs下
            else
            echo "No files found."
            exit 0
            fi
            echo "$m2.zip maked, now delete old files."
            rm -fr $str        #删除已被打包文件
            echo "done."
            exit 0

    使用方法:

    执行 crontab -e 编辑当前用户定时任务,进入编辑页面,点击 o  ,输入

    0 0 1 * * /home/hls/apache-tomcat-7.0.61/logzip.sh >> /home/hls/apache-tomcat-7.0.61/crontablog.log 2>&1

    按esc退出编辑 然后 :wq 保存退出。这样就在crontab里设置了定时任务(每月一号凌晨执行logzip.sh,并把执行文件中的日志输出在crontablog.log中)

    注意:windows下面创建的文件回车符和linux/unix下面的回车符不一样,可能会导致脚本无法执行,

    ------------------------------------------------------阿纪--------------------------------------------------------------

  • 相关阅读:
    6 完全平方数相关
    5 三位数,每个位置不同
    Neo4j Admin Import 导入多个node和relationship
    Rust所有权
    Rust 多态
    Rust 泛型
    Rust trait
    Rust模块化
    Spring Cloud(Dalston.SR1)
    git 速度慢问题解决
  • 原文地址:https://www.cnblogs.com/sunjiguang/p/5730561.html
Copyright © 2011-2022 走看看