• 【菜鸟学Linux】Cron Job定期删除Log(日志)文件


      以前一直做Windows开发,近期的项目中要求使用Linux。作为小菜鸟一枚,赶紧买了一本经典书《鸟哥的Linux私房菜》学习。最近刚好有一个小任务 - 由于产品产生的Log很多,而且增长很快,所以需要用脚本(Bash scripts)删除过期的Log文件

      使用Linux下的Cron Job可以很好的解决这个问题。

      什么是Cron Job?

      建立Cron Job需要用到命令crontab,维基百科定义:crontab命令常见于Unix和类Unix的操作系统之中,用于设置周期性被执行的指令

      查阅了一些资料(发现技术查询还是要用Google)参考后,期间也遇到很多问题,通过摸索和学习,实现步骤如下:

    一. 写一个Bash shell script,作用:检索日志文件夹下的所有log文件,查询每个文件的日期,如果日期过期,则删除这个log文件  

     1 #!/bin/bash
     2 
     3 log_path=""         #此处定义你的日志文件夹路径
     4 expried_time=7      #此处定义你的日志过期时间,如7天
     5 
     6 function deleteLogs(){
     7     # 获取系统时间,所有时间格式都是秒
     8     local currentDate=`date +%s`
     9     echo "current date: " $currentDate
    10 
    11     for file in `find $1 -name "*.js_*.log"` #此处定义文件名格式,避免误删
    12     do
    13         local name=$file
    14         local modifyDate=$(stat -c %Y $file)
    15 
    16         #对比时间,算出日志存在时间,距离最近一次修改
    17         local logExistTime=$(($currentDate - $modifyDate))
    18         logExistTime=$(($logExistTime/86400))
    19         
    20         if [ $logExistTime -gt $expried_time ]; then
    21             echo "File: " $name "Modify Date: " $modifyDate + "Exist Time: " $logExistTime + "Delete: yes"
    22             rm -f $file
    23         else
    24             echo "File: " $name "Modify Date: " $modifyDate + "Exist Time: " $logExistTime + "Delete: no"
    25         fi
    26     done
    27 }
    28 
    29 deleteLogs $log_path

    二. 新建一个Cron Job,周期性的执行上面的脚本

      命令:

    1 sudo crontab –e
    2 5 0 * * * /home/user/deleteOldLog.sh >> /home/user/cron_job.log 2>&1

       注意:

      1. 这里我用的是sudo crontab -e,不是crontab -e,这样做是使用root的crontab,可以使用sudo,获取root某些权限。

      2. Cron Job的格式如下:

    1 * * * * * command to be executed
    2 - - - - -
    3 | | | | |
    4 | | | | ----- Day of week (0 - 7) (Sunday=0 or 7)
    5 | | | ------- Month (1 - 12)
    6 | | --------- Day of month (1 - 31)
    7 | ----------- Hour (0 - 23)
    8 ------------- Minute (0 - 59)

        具体可参见http://www.cyberciti.biz/faq/how-do-i-add-jobs-to-cron-under-linux-or-unix-oses/,Cron Job的用法讲解很详细。

      

      3. 如何通过日志查看Cron Job的执行情况?

        ">> /home/user/cron_job.log 2>&1"的作用是可以方便的将Cron Job执行情况的日志记录到自己指定的Log文件中,方便查看Job执行情况。另外还可通过下面这个命令,查看Job执行的一些其他信息,感觉主要还是看自己指定的日志文件,如果执行出错,如Permisson Denied错误,在里面记录的很清楚。

    1 tail -f /var/log/cron

      

    三. 小结

      经过以上的步骤,就可以很轻松的在Linux中建立起一个Cron Job,用于周期性的做某些事情,如删Log等。

    四. 参考资料

      下面这些参考资料很不错,如果要学习Cron Job,应该就足够。

      1. HowTo: Add Jobs To cron Under Linux or UNIX?

        http://www.cyberciti.biz/faq/how-do-i-add-jobs-to-cron-under-linux-or-unix-oses/

      2. How to run a cron job using the sudo command

        http://askubuntu.com/questions/173924/how-to-run-a-cron-job-using-the-sudo-command

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

        http://blog.itpub.net/9252210/viewspace-684597

      4. Linux crontab日志讲解

        http://os.51cto.com/art/200910/159229.htm

      新手小白,通过日志记录自己的所学所得,抛砖引玉,欢迎批评指正:-)

      Best Regards

      Kevin Song

                                                      2014/6/30

      

      

      

  • 相关阅读:
    ios 集成react native
    聊聊职场潜规则
    cocopods 问题
    微信小程序实现给循环列表添加点击样式实例
    Android build.gradle
    小程序开发的40个技术窍门,纯干货!
    react-创建组件
    React Native在开发过程中遇到的一些问题(俗称:坑)
    微信小程序 开发过程中遇到的坑(一)
    微信小程序开源项目库汇总
  • 原文地址:https://www.cnblogs.com/KevinSong/p/3816981.html
Copyright © 2020-2023  润新知