• 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

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

    传个图片玩~

  • 相关阅读:
    RTMP协议安防视频直播点播平台EasyDSS点播目录绑定用户接口无响应问题排查
    RTMP协议安防视频平台EasyDSS在Linux下运行提示-bash .start.sh Permission denied问题解决
    RTMP协议视频直播点播平台EasyDSS内Go语言使用反射优化代码技巧说明
    IP摄像头RTMP协议互联网直播点播平台EasyDSS配置录像/直播计划无法生效是什么原因?
    将IP网络摄像头通过RTMP协议推送到视频直播点播平台EasyDSS时,如何通过抓包RTMP协议保存视频流为H264文件
    hdu2795 Billboard 线段树
    hdu1394 Minimum Inversion Number 线段树和树状数组
    poj 3468 A Simple Problem with Integers 线段树
    CF round #292 解题报告
    棋盘问题 poj1321
  • 原文地址:https://www.cnblogs.com/killbug/p/4313780.html
Copyright © 2020-2023  润新知