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

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

 

传个图片玩~

技术分享

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。