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

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

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

找到个网上的脚本:

#!/bin/bash

log_path=""         #此处定义你的日志文件夹路径
expried_time=      #此处定义你的日志过期时间,如7天

function mvLogs(){
    # 获取系统时间,所有时间格式都是秒
    local currentDate=`date +%s`
    echo "current date: " $currentDate

     -name "*.log"` #此处定义文件名格式,避免误删
    do
        local name=$file
        local modifyDate=$(stat -c %Y $file)

        #对比时间,算出日志存在时间,距离最近一次修改
        local logExistTime=$(($currentDate - $modifyDate))
        logExistTime=$(($logExistTime/))

        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

     -name "*.log.*"` #此处定义文件名格式,避免误删
    do
        local name=$file
        local modifyDate=$(stat -c %Y $file)

        #对比时间,算出日志存在时间,距离最近一次修改
        local logExistTime=$(($currentDate - $modifyDate))
        logExistTime=$(($logExistTime/))

        if [ $logExistTime -gt $expried_time ]; then
            echo "File: " $name "Modify Date: " $modifyDate + "Exist Time: " $logExistTime + "Delete: yes"
            /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=;
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

配置如下:

  * * * >&

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

*/ * * * * >&

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

传个图片玩~

crontab 移动日志-超越昨天的自己系列(12)的更多相关文章

  1. 时间作为横轴的图表(morris.js)超越昨天的自己系列(8)

    超越昨天的自己系列(8) morris.js的官网有详细的例子:http://www.oesmith.co.uk/morris.js/ 特别注意它的依赖: <link rel="sty ...

  2. spring和redis的整合-超越昨天的自己系列(7)

    超越昨天的自己系列(7) 扯淡:  最近一直在慢慢多学习各个组件,自己搭建出一些想法.是一个涉猎的过程,慢慢意识到知识是可以融汇贯通,举一反三的,不过前提好像是研究的比较深,有了自己的见解.自认为学习 ...

  3. maven为不同环境打包(hibernate)-超越昨天的自己系列(6)

    超越昨天的自己系列(6) 使用ibatis开发中,耗在dao层的开发时间,调试时间,差错时间,以及适应修改需求的时间太长,导致项目看起来就添删改查,却特别费力.   在项目性能要求不高的情况下,开始寻 ...

  4. HashMap归档-超越昨天的自己系列

    java HashMap 读一下源码,一个数组存储数据: transient Entry[] table; 内部存key和value的内部类: static class Entry<K,V> ...

  5. Collections.reverse 代码思考-超越昨天的自己系列(13)

    点进Collections.reverse的代码瞄了眼,然后就开始了一些基础知识的收集. 现在发现知道的越多,知道不知道的越多. 列几个记录下: reverse方法源码: /** * Reverses ...

  6. java进程性能分析步骤-超越昨天的自己系列(11)

    java进程load过高分析步骤: top 查看java进程情况     top -Hp 查看某个进程的具体线程情况   printf 0x%x 确认哪一个线程占用cpu比较多,拿出来转成16进制   ...

  7. 快速用springmvc搭建web应用-超越昨天的自己系列(10)

    Demo地址:http://pan.baidu.com/s/1sjttKWd 创建命令: mvn archetype:generate -DgroupId=com.witown.open.demo - ...

  8. 如何查看crontab的日志记录

    在Unix和类Unix的操作系统之中,crontab命令常用于设置周期性被执行的指令,也可以理解为设置定时任务. crontab中的定时任务有时候没有成功执行,什么原因呢?这时就需要去日志里去分析一下 ...

  9. Java 集合系列 12 TreeMap

    java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java ...

随机推荐

  1. SQL数据库修改默认备份和恢复路径

    每次都做数据恢复和备份的时候,点Add文件,系统会自动指定到一个默认路径,是SQL的安装目录,但是我的数据库不是备份在这里,每次都要更改有点麻烦. 如上图,更改这个有三个方法. 方法一:找到注册表,手 ...

  2. Dapper学习笔记(2)-链接引用

    在研究Dapper源码时发现Dapper NET45类库中的SqlMapper.cs文件前面有个蓝色的箭头图标,发现在Dapper NET45文件夹下根本不存在SqlMapper.cs文件,其文件属性 ...

  3. JSR 303标准

    JSR 303是Java为bean数据合法性校验提供的标准框架,JSR 303通过在Bean属性上标注类似于@NotNull.@Max等标准的注解指定校验规则,并通过标准的校验接口对bean进行验证. ...

  4. XML做下拉列表

    5-18X.php主页面 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http: ...

  5. object-c 1

    多个参数的写法 (方法的数据类型)函数名:(参数1数据类型)参数1的数值的名字 参数2的名字: (参数2数据类型) 参数2值的名字 …. ; 举个例子,一个方法的定义: -(void) setKids ...

  6. iOS ipv6

    这当中最重要的两个概念是DNS64和NAT64. DNS64 DNS64说白了是用来帮助host获取IPv6地址的,传统的DNS服务器可以把域名转换成IPv4地址,但我们的iPhone设备如果处于IP ...

  7. 2013=10=19 ENGLISH 翻译

    数据结构习题及答案 严蔚敏_课后习题答案 http://www.doc88.com/p-243584884293.html 273089354 随着女性获得平等权力的趋势,女性日渐增长的经济权力以及为 ...

  8. 全面剖析Redis Cluster原理和应用 (转)

    1.Redis Cluster总览 1.1 设计原则和初衷 在官方文档Cluster Spec中,作者详细介绍了Redis集群为什么要设计成现在的样子.最核心的目标有三个: 性能:这是Redis赖以生 ...

  9. Java 多并发之原子访问(Atomic Access)

    在编程中,一个原子操作是只会出现一次的.一个原子操作在中间不会停止:要么全部发生要么一点也不发生.我们只有在原子操作完成之后才会看到原子操作的具体影响. 甚至是非常简单的表达式能够构造分解为简单操作的 ...

  10. ubuntu16.04下编译安装vim8.1

    之前写过一篇centos7下编译安装vim8.0的教程,ubuntu16.04相比centos7下安装过程不同在于依赖包名字的不同,其余都是一样.下面给出ubuntu16.04编译安装vim8.0需要 ...