为什么/var/log/messages总是在晚上22:30备份?
我们都知道SuSE系统日志/var/log/messages每天都会备份一个.bz2的压缩文件。但是,笔者发现开发机器上系统日志备份总是发生在晚上22:30。现网这个时候正式业务高峰期,如果在这个时间点压缩备份日志,可能会造成一定的cpu突发,对业务造成影响。如果能把这个时间修改到凌晨3:30或者4:30,则可以一定程度上减少影响。
/var/log/messages是syslog-ng服务写入磁盘的。
linux-5288:~ # lsof | grep /var/log/messages
syslog-ng 20928 root 4w REG 8,2 16455745 779653 /var/log/messages
syslog-ng是通过logrotate定时任务进行日志备份的。logrotate定时任务脚本放在/etc/cron.daily/logrotate。日志备份策略配置文件放在/etc/logrotate.conf和/etc/logrotate.d/*。
/var/log/messages日志对应的备份策略文件是/etc/logrotate.d/syslog。按照网上的说法,备份策略上写说当日志文件大小超过4MB(+4096k)的时候,就备份一下。
/var/log/warn /var/log/messages /var/log/allmessages /var/log/localmessages /var/log/firewall /var/log/acpid /var/log/NetworkManager {
compress
dateext
maxage 365
rotate 99
missingok
notifempty
size +4096k
create 640 root root
sharedscripts
postrotate
/etc/init.d/syslog reload > /dev/null
endscript
}
咨询了一下suse工程师,得知/etc/cron.daily目录下的logrotate脚本是cron服务每天来调用的,具体策略是在/etc/crontab里面配置的。
linux-rccz:~ # cat /etc/crontab
SHELL=/bin/sh
PATH=/usr/bin:/usr/sbin:/sbin:/bin:/usr/lib/news/bin
MAILTO=root
#
# check scripts in cron.hourly, cron.daily, cron.weekly, and cron.monthly
#
-*/15 * * * * root test -x /usr/lib/cron/run-crons && /usr/lib/cron/run-crons >/dev/null 2>&1
每15分钟执行一次/usr/lib/cron/run-crons脚本,检测是否需要执行/etc/cron.daily下的脚本。
这个脚本执行的策略主要是看/var/spool/cron/lastrun/cron.daily文件的时间。
linux-5288:~ # ls -shal /var/spool/cron/lastrun/cron.daily
0 -rw-r--r-- 1 root root 0 Sep 19 22:30 /var/spool/cron/lastrun/cron.daily
脚本每天执行/etc/cron.daily目录下脚本之前,就会生成这个文件。下次执行的时间,就是根据这个文件的修改时间后的一天。因为/usr/lib/cron/run-crons脚本是15分钟检查一次,所以/var/spool/cron/lastrun/cron.daily的修改时间只可能是00分、15分、30分、45分。
除了这个文件,还可以修改/etc/sysconfig/cron来规定cron.daily执行的时间。
linux-rccz:~ # cat /etc/sysconfig/cron | grep DAILY_TIME -B8 -A5
## Type: string
## Default: ""
#
# At which time cron.daily should start. Default is 15 minutes after booting
# the system. Example setting would be "14:00".
# Due to the fact that cron script runs only every 15 minutes,
# it will only run on xx:00, xx:15, xx:30, xx:45, not at the accurate time
# you set.
DAILY_TIME=""
## Type: integer
## Default: 5
#
# Maximum days not running when using a fixed time set in DAILY_TIME.
# 0 to skip this. This is for users who will power off their system.
#
# There is a fixed max. of 14 days set, if you want to override this
# change MAX_NOT_RUN_FORCE in /usr/lib/cron/run-crons
MAX_NOT_RUN="5"
一句话总结:执行如下命令修改cron.daily执行时间,进而可以修改/var/log/messages的备份时间。
sed -i 's/^DAILY_TIME=".*"/DAILY_TIME="03:30"/g' /etc/sysconfig/cron
- 点赞
- 收藏
- 关注作者
评论(0)