【菜鸟学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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏潘嘉兴的专栏

手把手教你如何优化linux服务器

服务器的优化是我们最小化安装系统后应该做的事情,下面是一些常见的基本的优化服务器的方法。关闭不需要的服务。列出需要启动的的服务crond、network、ssh...

68500
来自专栏皮振伟的专栏

linux、pthread、qemu 的一次 pthread create 失败的分析

qemu 因为 pthread create 失败而发生了 crash 。这种类型的问题比较少见,这里记录一下问题的分析过程以及解决思路。

55000
来自专栏Linuxer的专栏

吴锦华 / 明鑫 : 用户态文件系统 ( FUSE ) 框架分析和实战

用户态文件系统(filesystem in userspace, 简称 FUSE),它能使用户在无需编辑和编译内核代码的情况下,创建用户自定义的文件系统。

1.6K10
来自专栏郑剑的专栏

linux 内存管理初探

本文主要介绍 linux 内存组织结构和页面布局,内存碎片产生原因和优化算法,linux 内核几种内存管理的方法,内存使用场景以及内存使用的那些坑。

2.6K90
来自专栏莫韵的专栏

linux 根分区的空间去哪里了 ?记一次根分区满的服务故障排查记录

linux 根分区的空间去哪里了 ?记一次根分区满的服务故障排查记录。我的排查思路是先找占用没有占用,找占用的文件句柄。

1.5K00
来自专栏刘远飞的专栏

CentOS6.5系统yum安装LAMP环境

采用Linux下二进制模式来安装LAMP,适合初学者,测试使用。

87300
来自专栏云加头条

Linux Kernel 4.11 发布

4月30日,Linus Torvalds 在内核邮件列表上宣布释出 Linux Kernel 4.11。

24800
来自专栏Linuxer的专栏

宋宝华:LEP ( Linux 易用剖析器 ) 是什么,为什么以及怎么办 ( 1 )

LEP是 Linuxer 之 LEP 项目组(Barry Song,Mac Xu,陈松等以及陈莉君老师)正在致力于打造的一个开源项目,本文是 LEP 文档《 L...

52100
来自专栏张戈的专栏

【ES私房菜】收集 Linux 系统日志

ES环境已经就绪,我们需要先调通一类简单日志作为数据上报全链路的试运行。恰好Linux系统日志就是这样一个角色,随处可见,风险可控。这里,我们选择了2种Linu...

1K10
来自专栏邹立巍的专栏

Linux 的进程间通信:文件和文件锁

我们首先引入文件进行 IPC ,试图先使用文件进行通信引入一个竞争条件的概念,然后使用文件锁解决这个问题,从而先从文件的角度来管中窥豹的看一下后续相关 IPC ...

1.3K00

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励