Centos7下配置系统⽇志备份策略
Centos下配置系统⽇志备份策略
1、 引发问题
keepalived运⾏时,往往会将⼼跳信息记录到系统⽇志/var/log/messages中,每隔2-3秒记录⼀条⽇志信息,长久以往,messages⽂件将永远增长,从⽽占满内存空间。
2、解决思路
利⽤logrotate⽇志轮询和crontab定时任务解决问题。⽇志轮询解决⽇志⽣成的策略,包括⽇志备份⽂件数,是否压缩备份等参数。crontab是执⾏rsyslog的定时任务,可以配置每天或每周什么时间执⾏⽇志备份策略。
3、配置⽰例
a)    配置定时任务
vi /etc/crontab
增加每天执⾏⽇志备份的策略:
上图中,“10 9 * * * root/etc/cron.daily/logrotate“  代表每天9点10分执⾏logrotate,如图所⽰,注意此⾏代码中的root是执⾏这个命令的⽤户,必须填写,具体说明参考第4节中的参考资料
b)    more /etc/cron.daily/logrotate,到配置logrotate的真正⽂件路径(/f),如图所⽰:
c)    vi  /f
编辑/var/log/messages策略,如下所⽰
该⽰例的配置内容为每天⽣成⼀次备份⽂件,由于配置轮询rotate为2,所以最多会⽣成两个压缩的备份⽂件1和2,所以到第三天的时候将覆盖备份⽂件1。每次⽣成备份⽂件后,当前的messages⽂件根据内容将重新清空。这是由copytruncate属性保证的。备份情况如下所⽰:
4、参考资料
cron把命令⾏保存在crontab(cron table)⽂件⾥,这个⽂件通常在 /etc ⽬录下。每个系统⽤户都可以有⾃⼰的crontab(在
/var/spool/cron/ 下)。要查看当前⽤户的crontab,输⼊ crontab -l;要编辑crontab,输⼊ crontab -e;要删除crontab,输⼊crontab -r。如当前是root⾝份,要查看/编辑/删除/某⽤户的crontab,只需在相应的命令后加上 -u USERNAME(如 crontab -e -u USERNAME)即可。crontab⽂件的默认编辑器是vi,可以输⼊ exportVISUAL=’editor’ 更改默认编辑器。
cron服务每分钟不仅要读⼀次 /var/spool/cron⽬录内的所有⽂件,还需要读⼀次/etc/crontab ⽂件。配置这个⽂件也能让cron执⾏任务。使⽤crontab命令是对⽤户级任务的配置,⽽编辑 /etc/crontab ⽂件是对系统级任务的配置。
语法说明
以下是两个cron语句的例⼦(在 /etc/crontab ⽂件⾥)。前者⽤来晚间备份 /etc ⽬录,后者运⾏Analog程序处理服务器的统计信息。
12 3 * * * roottar czf /usr/local/backups/daily/ /etc >> /dev/null 2>&1
52 5 * * * root/usr/local/src/analog-5.32-lh/analog >> /dev/null 2>&1
以下是cron语句中的字段与字段说明:
字段说明
1分钟(0-59)
2⼩时(2-24)
3⽇期(1-31)
4⽉份(1-12;或英⽂缩写Jan、Feb等)
5周⼏(0-6,0为周⽇;或单词缩写Sun、Mon等)
6⽤户名(执⾏命令时以此⽤户的⾝份)
7要执⾏的命令(路径)
现在来看第⼀⾏:
12 3 * * * roottar czf /usr/local/backups/daily/ /etc >> /dev/null 2>&1
这条语句将在每天的凌晨3点12分(03:12)运⾏tar czf /usr/local/backups/daily//etc命令。>>/dev/null 2>&1 表⽰把所有标准输出发送到/dev/null(linux的回收站),把标准错误输出(2)发送到和标准输出(1)同样的地⽅(即 /dev/null)。运⾏这⾏命令将不会产⽣任何输出。
这条语句可以变得稍微复杂⼀点:
30 15 13 6 1 *root tar czf /usr/local/backups/daily/ /etc >> /dev/null2>&1
它将在6⽉13⽇周⼀的15:30运⾏ tar czf/usr/local/backups/daily/ /etc 命令。
以下语句可以达到同样的效果:
30 15 13 Jun Mon* root tar czf /usr/local/backups/daily/ /etc >> /dev/null2>&1
如果你想以⽤户joey的⾝份每⼩时的第15分钟运⾏某个程序,可以使⽤:
15 * * * * joey/usr/bin/somecommand >> /dev/null 2>&1
其中的星号(*)是通配符,表⽰cron将忽略这个字段。
如果你想每两⼩时就运⾏某个程序,可以在⼩时字段⾥使⽤ */2。它将会在2点,4点,6点……22点,24点运⾏。具体语句如下:
0 */2 * * * joey/usr/bin/somecommand >> /dev/null 2>&1
cron语句中还可以使⽤逗号(,)来指定多个时间。例如你想在每⼩时的15分和30分运⾏某个程序,可以在分钟字段使⽤ 15,30:
15,30 * * * *joey /usr/bin/somecommand >> /dev/null 2>&1
如果你想在每⽉的第⼀周(即1号到7号)每天的指定时间运⾏某个程序,可以在⽇期字段使⽤ 1-7:
15,30 */2 1-7 ** joey /usr/bin/somecommand >> /dev/null 2>&1
这条语句将在每⽉的第1-7⽇每两⼩时的15分和30分(02:15,02:30……22: 15,22:30等)运⾏ /usr/
bin/somecommand 命令。
如果你想在每天的16:18执⾏⼀个脚本集合,可以把所有要执⾏的脚本放到⼀个⽬录中(如/home/username/cron),可以使⽤:
18 16 * * * rootrun-parts /home/username/cron >> /dev/null 2>&1
如果你想保存某个程序的输出结果,可以把 >> /dev/null 2>&1 替换为 >>/home/user/somecommand.log 2>&1 。
以下举⼏个例⼦说明问题:
每天早上6点
0 6 * * * echo"Good morning." >> / //注意单纯echo,从屏幕上看不到任何输出,因为cron把任何输出都email到root的信箱了。
每两个⼩时
0 */2 * * * echo"Have a break now." >> /
晚上11点到早上8点之间每两个⼩时,早上⼋点
0 23-7/2,8 * * * echo "Have a gooddream:)">> /
每个⽉的4号和每个礼拜的礼拜⼀到礼拜三的早上11点
0 11 4 * 1-3command line
1⽉1⽇早上4点
0 4 1 1 *command line
可⾃动轮转,压缩,删除,邮寄⽇志⽂件。可每天,每周,每⽉或⽇志⽂件达到⼀定⼤⼩时进⾏操作。通常logrotate是⼀个每天的cron计划,⼀般不会在⼀天内多次修改⽇志,除⾮轮转是基于⽇志⼤⼩的,或者logrotate被多次运⾏,使⽤了-f(--force)项。
命令⾏上可指定任何多个配置⽂件。
后⾯的配置会覆盖前⾯的配置,所以配置⽂件的加载顺序很重要。
通常需要在⼀个配置⽂件中include其他配置⽂件,具体参见include指令⽤法。
如果在命令⾏上给出了⼀个⽬录,那么该⽬录下所有⽂件都将被⽤作配置⽂件。
如果没有参数,logrotate就打印版本等信息。如果在轮转⽇志时发⽣错误,会以⾮0状态退出。
选项:
-d    debug模式,隐含-v,不会对⽇志⽂件做实际操作
-f, --force
强制轮转⽇志
-m, --mail <command>
邮寄⽇志时使⽤的命令
-s, --state <statefile>
指定另⼀个state⽂件
--usage
打印帮助
-v, --verbose
详细信息
配置⽂件
logrotate会读取每⼀个配置⽂件,配置⽂件中可对global和具体log⽂件配置。
本地配置(log⽂件配置)覆盖global配置,后来的配置覆盖先前的配置。
# sample logrotate configuration file            注释⾏
compress                          轮转后进⾏压缩
/var/log/messages {                  指定⽇志⽂件路径
rotate 5                        保留5个轮转⽂件
weekly                        每周轮转
postrotate                        轮转之后执⾏的命令(在压缩旧⽇志之前)
/usr/bin/killall -HUP syslogd
endscript
}
"/var/log/httpd/access.log" /var/log/httpd/error.log {    指定了两个⽇志⽂件
⽂件名中有空格,要⽤""
⽀持' " \的shell引⽤规则字符
rotate 5                        保留5个轮转⽂件
mail                   解压后邮寄超过5次轮转的⽼⽇志⽂件,⽽不是删除          size 100k                        ⽇志⽂件达到100K时就进⾏轮转
sharedscripts                    表⽰postrotate脚本在压缩了⽇志之后只执⾏⼀次
postrotate
/usr/bin/killall -HUP httpdrotate属性
endscript
}
/var/log/news/* {            所有/var/log/news/下的⽂件
通配符*,会轮转包括之前轮转的⽂件,需要olddir指令
或者*.log来指定只有.log后缀的⽂件
monthly                每⽉轮转
rotate 2
olddir /var/log/news/old        配合指定⽂件时的*通配符使⽤
missingok                如果指定的⽬录不存在,logrotate会报错,此项⽤来关闭报错          postrotate
kill -HUP `cat /var/run/inn.pid`

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。