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

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

 

传个图片玩~

posted on   每当变幻时  阅读(583)  评论(0编辑  收藏  举报

编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述
历史上的今天:
2013-03-04 文件上传+截图+预览升级版-我们到底能走多远系列(23)

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示