Linux cron.log设置,使用Linux Cron Job与Logrotate进行日志轮换管理

使用Linux Cron Job与Logrotate进行日志轮换管理

Dickensi Wen 2007-05-22

WebEx MIS dept.

通常大多数应用都会使用到日志用来跟踪程序运行时的一些关键事件或者异常,这样可以给项目维护/支持Team带来了很大的方便,但有时也会给我们带来一些麻烦,比如日志文件太多吃光所有硬盘空间,导致程序无法正常运行;

有时文件太分散,不便于集中管理;有的单个文件太大导致不方便打开阅读等等。

在MIS的项目中也碰到这样的问题,经常需要人手工去管理这些日志文件。这几天我查阅了相关的一些资料及测试发现cron

job 与

logrotate结合可以很方便的解决我们现有的问题,并正在准备运用到我们系统中去。以下是在Research中获得的一些经验,希望对大家有帮助。

在开始配置之前我们先介绍一下cron,cron是一个按某些规则调度进程的系统服务,

这些规则默认定义在/etc/crontab文件中,

文件里的一个条目叫做一个事件或一个工作(job), 不过需要注意的是,

所做的这些工作是独立的。

Cron还可以被配置为允许或者拒绝特定用户的调度事件能力,在linux系统中,至少有两种不同的cron版本在使用,虽然它们的基本概念是一样的,

但是有些特定的不同,

有必要的话建议大家阅读相关的一些文档,由于系统预设就有相当多的例行性工作,所以这个系统服务是预设启动的。

logrotate是用来对linux系统日志文件进行管理的一个小程序,大家可以在/usr/sbin/logrotate中找到他,一般都会随系统而安装,也可以在linux安装盘上找到相应的包,有了它我们可以轻松地对日志进行轮换、压缩、删除等管理,甚至可以以邮件形式发送日志给指定用户,

每个文件可以是以每天、每星期、每月,或者当文件超过某个大小时进行轮换。

所谓的轮换就是把现在的log命名为log.1,然后继续写log,如果存在log.1就命名log.1为log.2然后命名log为log.1,依此类推。通常情况下logrotate是以每天的一个cron

job运行的,在这种设置下日志每天最多会被轮换一次,大家如果仔细观察,能发现很多熟悉的应用程序(比如mysql,

apache http server

等等)都有用到logrotate进行日志管理。对于轮换的策略默认是放在/etc/logrotate中的,由于MIS

BLiS系统中日志增长迅速,有的日志一天就有可上G,因此在本例中我们把cron

job的执行周期调到10分钟。

以下是step by step的描述,介绍了如何成功配置日志轮换,

该例子为/blis/log目录下的每个log文件定义了20个轮换文件,每个轮换文件的大小控制在50M,

并在轮换的时候进行压缩:

1. 拷贝logrotate config file “/etc/logrotate.conf”

到“/etc/blis-logrotate.conf” , 并修改文件内容如下:

# see

"man logrotate" for details

# rotate log files weekly

weekly

# keep 4 weeks worth of backlogs

rotate 4

# create new (empty) log files after rotating old

ones

create

# uncomment this if you want your log files

compressed

#compress

# RPM packages drop log rotation information into this

directory

#注释下行,主要是为类避免把其他log文件的轮换策略引用到10分钟的

#cron job 中

#include /etc/logrotate.d

#定义轮换策略到/blis/log 下的所有文件

#我们也可以指定确确的文件名(多个文件以 逗号‘,’

分割)来定义策略

/blis/log/* {

#指定超过50000k就轮换

size 50000k

#使用类似于linux的cat命令方式截取日志,可以避免有的

#日志系统运行时当日志文件不存在不会创建新文件的问题

copytruncate

#使用gzip压缩轮换后的文件

Compress

#保留20个轮换文件

rotate 20

#所有的轮换文件保留到 “/blis/oldlog/”

olddir /blis/oldlog/

}

备注:如果被管理日志的增长速度不是很快的话可以不用定义单独的blis-logrotate.conf配置文件,并直接把/blis/log配置项加在logrotate.conf末尾就可以了。本例中我们引入新的配置文件主要是因为我们需要每10分钟去检测/blis/log下的日志变化,但又不想影响系统中其它的检测间隔,这样也可以减轻系统负载。

我们也可以通过运行命令“/usr/sbin/logrotate

/etc/blis-logrotate.conf”来检查运行结果是否跟预期的一样,通过多次修改来达到想要的效果,这样可以提高我们的效率。

2. 定义一个每10 分钟执行的 run parts 目录 cron.10mins

a) 修改crontab “/etc/crontab” 如下,加入每10 分钟执行的 run parts :

cron.10mins

SHELL=/bin/bash

PATH=/sbin:/bin:/usr/sbin:/usr/bin

MAILTO=root

HOME=/

# run-parts

01 * * * * root run-parts /etc/cron.hourly

02 4 * * * root run-parts /etc/cron.daily

22 4 * * 0 root run-parts /etc/cron.weekly

42 4 1 * * root run-parts /etc/cron.monthly

*/10 * * * * root run-parts /etc/cron.10mins

b) 创建 “/etc/cron.10mins”目录, 命令: mkdir /etc/cron.10mins,

所有再改目录的可执行文件将会每10分钟调用一次

c) 把文件“/etc/cron.daily/logrotate”拷贝到“/etc/cron. 10mins /

logrotate”,并修改如下, 命令: mv /etc/cron.daily/logrotate

/etc/cron.10mins /logrotate

#!/bin/sh

#use blis-logrotate.conf as application blis logrotate

configuration file

/usr/sbin/logrotate /etc/blis-logrotate.conf

EXITVALUE=$?

if [ $EXITVALUE != 0 ]; then

/usr/bin/logger -t logrotate "ALERT exited abnormally with

[$EXITVALUE]"

fi

exit 0

通常有些程序的日志模块也具备一些轮换的功能,为了能把日志管理的更好我们可以把这些轮换功能关掉,比如对于log4j的设置是该对应的配置文件把appender设为“org.apache.log4j.FileAppender”

,如:

…..

log4j.rootLogger=DEBUG, A1, A2

log4j.appender.A1=

org.apache.log4j.FileAppender

log4j.appender.A1.DatePattern='.'yyyy-MM-dd

log4j.appender.A1.File=/blis/log/highdeal.log

log4j.appender.A1.layout=org.apache.log4j.PatternLayout

log4j.appender.A1.layout.ConversionPattern=%d{MM-d

HH:mm:ss,SSS}[%-5p] %m%n

log4j.logger.salesdashboard=DEBUG,SFILE

log4j.appender.SFILE=org.apache.log4j.FileAppende

log4j.appender.SFILE.DatePattern='.'yyyy-MM-dd

log4j.appender.SFILE.File=/blis/log/salesdashboard.log

log4j.appender.SFILE.layout=org.apache.log4j.PatternLayout

log4j.appender.SFILE.layout.ConversionPattern=%d{MM/dd/yyyy

HH:mm:ss}[%-5p] %m%n

….

3. 应用修改的配置,重新启动cron服务, 命令: service crond restart.

小结:

这只是一个简单的运用logrotate的例子,从本质上来说就是用cron

调用/usr/sbin/logrotate来执行轮换策略,logrotate还可指定其他的一些参数用来提供更多的功能,具体大家可以参阅man

logrotate文档。在项目中,我们还需要根据具体的需求,server负载,日志增长速度,网络环境等来制定轮换策略。有空欢迎大家一起探讨。

Reference:

man cron

man crontab

man logrotate

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要查看php-fpm.log文件,可以使用以下命令: ``` sudo less /var/log/php-fpm.log ``` 如果想要配置logrotate,可以按照以下步骤进行: 1. 编辑logrotate的配置文件:sudo nano /etc/logrotate.d/php5-fpm 2. 在文件中添加以下内容: ``` /var/log/php5-fpm.log { weekly missingok rotate 52 compress delaycompress notifempty create 0660 www-data adm sharedscripts postrotate /etc/init.d/php5-fpm reload > /dev/null endscript } ``` 这个配置文件将会每周轮换一次日志文件,并且保留最近的52个文件。日志文件会被压缩并且延迟压缩,以便在下一次轮换进行。 3. 保存并退出文件。 4. 执行以下命令以测试logrotate是否正常工作: ``` sudo logrotate -f /etc/logrotate.d/php5-fpm ``` 这将立即执行logrotate并压缩php5-fpm.log文件。如果一切正常,你应该会看到输出,表明已经轮换日志文件。 5. 设置定时任务,以便每周自动运行logrotate: ``` sudo nano /etc/cron.weekly/logrotate ``` 在文件中添加以下内容: ``` #!/bin/sh /usr/sbin/logrotate /etc/logrotate.conf >/dev/null 2>&1 EXITVALUE=$? if [ $EXITVALUE != 0 ]; then /usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]" fi exit 0 ``` 这个文件将会在每周运行logrotate,以便自动轮换日志文件。保存并退出文件。 6. 设置文件权限: ``` sudo chmod 755 /etc/cron.weekly/logrotate ``` 现在,你已经成功地配置了php5-fpm.loglogrotate

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值