首页 > 学院 > 操作系统 > 正文

crontab 移动日志-超越昨天的自己系列(12)

2024-06-28 13:21:42
字体:
来源:转载
供稿:网友
crontab 移动日志-超越昨天的自己系列(12)

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

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

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

找到个网上的脚本:

#!/bin/bashlog_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

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

传个图片玩~


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表