【菜鸟学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 条评论
登录 后参与评论

相关文章

来自专栏架构说

tcp如何维护长连接

上次提到tcp数据流无边界特点 还有一个特点那就是 TCP有长连接和短连接之分 目录结构: ? tcp连接的终止 — 01 — socke正常关闭 流程:...

4339
来自专栏Web 开发

涨姿势 – 不一样的服务端长连接方案 – 客户端代理

传统的 LAMP 架构,PHP-CGI  这种方式是很难处理长连接的。要么写死循环的方式来握住请求,要么使用 swoole 这种,通过 C 拓展来支持。

682
来自专栏互联网杂技

入门webpack(下)

插件(Plugins) 插件(Plugins)是用来拓展Webpack功能的,它们会在整个构建过程中生效,执行相关的任务。 Loaders和Plugins常常被...

3236
来自专栏高性能服务器开发

服务器开发中网络数据分析与故障排查经验漫谈

一、 操作系统提供的网络接口 为了能更好的排查网络通信问题,我们需要熟悉操作系统提供的以下网络接口函数,列表如下: 接口函数名称接口函数描述接口函数签名soc...

3055
来自专栏即时通讯技术

网络编程懒人入门(六):深入浅出,全面理解HTTP协议

HTTP(全称超文本传输协议,英文全称HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这...

1614
来自专栏散尽浮华

Maven私服Nexus3.x环境构建操作记录

Maven介绍 Apache Maven是一个创新的软件项目管理和综合工具。 Maven提供了一个基于项目对象模型(POM)文件的新概念来管理项目的构建,可以从...

74810
来自专栏信安之路

nmap使用指南(终极版)

2.指定范围 192.168.1.1-255 192.168.1-255.1(任意位置) 3.IPv6地址只能用规范的IPv6地址或主机名指定。 CIDR 和...

2580
来自专栏云加头条

TCP关闭连接(为什么会能 Time_wait,Close_wait ) ?

最近一段时间一直在学习阅读mina和nio的源码,也发现了一些问题无法解决,然后重读了一下tcp协议,收获颇多。这次就和大家分享一下我们的netframewor...

4.3K2
来自专栏一个默默无闻的工程师的日常

OpenStack Apis Authenticate (Token ID&Tenant ID)

1724
来自专栏软件开发 -- 分享 互助 成长

Android真机调试的时候logcat中无法输出调试信息的解决办法

真机调试不输出日志到logcat的原因是手机厂商默认关闭了调试打印的功能,通过以下方法开启此方法。 下面以华为P6手机为例进行操作: 1、在拨号界面输入:*#*...

1938

扫码关注云+社区