zoukankan      html  css  js  c++  java
  • crontab 移动日志-超越昨天的自己系列(12)

    linux上定时执行某些脚本是管理服务器的时候比较常用的场景,比如定时检查进程是否存在,定时启动或关闭进程,定时检查日志删除日志等。

    当我打开google百度crontab时长篇大论的一大堆,详细解释的一大堆,各种抄来抄去,现在觉得资源多了未必是好事。

    假设是定时执行shell,来移动log文件

    找到个网上的脚本:

    #!/bin/bash
    
    log_path=""         #此处定义你的日志文件夹路径
    expried_time=7      #此处定义你的日志过期时间,如7天
    
    function mvLogs(){
        # 获取系统时间,所有时间格式都是秒
        local currentDate=`date +%s`
        echo "current date: " $currentDate
    
        for file in `find $1 -name "*.log"` #此处定义文件名格式,避免误删
        do
            local name=$file
            local modifyDate=$(stat -c %Y $file)
    
            #对比时间,算出日志存在时间,距离最近一次修改
            local logExistTime=$(($currentDate - $modifyDate))
            logExistTime=$(($logExistTime/86400))
    
            if [ $logExistTime -gt $expried_time ]; then
                echo "File: " $name "Modify Date: " $modifyDate + "Exist Time: " $logExistTime + "Delete: yes"
                #rm -f $file
            else
                echo "File: " $name "Modify Date: " $modifyDate + "Exist Time: " $logExistTime + "Delete: no"
            fi
        done
    }
    mvLogs /home/admin/web-deploy/logs

    我的需求:线上有web1 web2 两台机器,后面是一台发布机器。

      需要检查web1和web2的机器上的log文件,如果超出3天,就讲这些文件移入mount的文件夹内,目录区分web1,web2。

    放在web机器上的脚本修改:

    
    
    #!/bin/bash
    #传入参数为扫描文件夹路径
    function mvLogs(){
        echo "-----------------------------------------------------------"
        date +"%Y-%m-%d %H:%M"
        # 获取系统时间,所有时间格式都是秒
        local currentDate=`date +%s`
        echo "current date: " $currentDate
    
        for file in `find $1 -name "*.log.*"` #此处定义文件名格式,避免误删
        do
            local name=$file
            local modifyDate=$(stat -c %Y $file)
    
            #对比时间,算出日志存在时间,距离最近一次修改
            local logExistTime=$(($currentDate - $modifyDate))
            logExistTime=$(($logExistTime/86400))
    
            if [ $logExistTime -gt $expried_time ]; then
                echo "File: " $name "Modify Date: " $modifyDate + "Exist Time: " $logExistTime + "Delete: yes"
                cp $file /mnt/newlogs/$2/web
                #rm $file;
            else
                echo "File: " $name "Modify Date: " $modifyDate + "Exist Time: " $logExistTime + "Delete: no"
            fi
        done
    }
    mvLogs /home/admin/web-deploy/logs $machine_name

    那么我只需要在发布机器上调用web机器上的这个脚本,就可以检查web机器本地log情况,并处理。需要传机器代号,如web1。

    发布机上的脚本:

    #!/bin/bash
    expried_time=3;
    SERVERS="web1 web2";
    function mvLogs(){
        for server in $SERVERS;do
            echo $server;
            local machine="svr_"$server;
            echo $machine;
            ssh admin@$machine "sh /home/admin/logcheck/mvlog.sh "$server" "$expried_timedone
    }
    mvLogs

    这样就可以再发布机上控制比对时间了。

    crontab

    修改本用户下的定时任务:
    crontab -e
    查看本用户下的定时任务
    crontab -l

    配置如下:

    45 15 * * * sh /home/productscm/logcheck/mvlog.sh >> /home/productscm/logcheck/log/mvlog.log 2>&1

    如此就会在每天的15点45分是执行上面的逻辑。

    */1 * * * * sh /home/productscm/logcheck/mvlog.sh >> /home/productscm/logcheck/log/mvlog.log 2>&1

    一分钟执行一次 用来测试 哈哈~

    传个图片玩~

  • 相关阅读:
    试试主题显示
    四则运算
    实验四 决策树算法及应用
    实验三 朴素贝叶斯算法及应用
    实验二 K-近邻算法及应用
    实验一 感知器及其应用
    实验三 面向对象分析与设计
    实验二 结构化分析与设计
    实验一 软件开发文档与工具的安装与使用
    举例分析流程图与活动图的区别与联系
  • 原文地址:https://www.cnblogs.com/killbug/p/4313780.html
Copyright © 2011-2022 走看看