📄 0570syslog.htm
字号:
include /etc/logrotate.d
<span class=term_say># 将底下这个目录中的所有档案都读进来执行 rotate 的工作!</span>
/var/log/wtmp {
monthly
create 0664 root utmp
rotate 1
}
<span class=term_say># 基本上,在 logrotate.conf 档案当中,只有这个资料是在记载如何对登录档进行轮替的!
# 这个登录档记载的就是使用 login 登入系统时的使用者状态,还记得那个 last 指令吧?
# 就是读自 /var/log/wtmp 当中记录的资料啦!整个段落的意义是∶
# 1. 每个月进行一次 log rotate 的工作;
# 2. 将档案的权限设定为 664 ,且拥有者为 root ,群组为 utmp;
# 3. 仅保存前一个月的 rotate 备份!
# 这也是为什么我们说 last 只会秀出这个月的资料而已的原因~因为一个月轮替一次嘛!
# 这个 rotate 可以改大一点,例如 5 以保存五个月,以利追踪 </span>
/var/log/btmp {
missingok
monthly
create 0600 root utmp
rotate 1
}</span>
<span class=term_say># 这个跟 wtmp 类似!</span>
</pre></td></tr></table>
由这个档案的设定我们可以知道 /etc/logrotate.d 其实就是由 /etc/logrotate.conf
所规划出来的目录,所以,其实我们可以将所有的资料都给他写入 /etc/logrotate.conf
即可,但是这样一来这个档案就实在是太复杂了,尤其是当我们使用很多的服务在系统上面时,
每个服务都要去修改 /etc/logrotate.conf 的设定也似乎不太合理~
所以,如果独立出来一个目录,那么每个以 RPM 打包方式所建立的服务的登录档轮替设定,
就可以独自成为一个档案,并且放置到 /etc/logrotate.d/ 当中即可,
真是方便又合理的做法啊! ^_^<br><br>
一般来说,这个 /etc/logrotate.conf 是『预设的轮替状态』而已,
我们的各个服务都可以拥有自己的登录档轮替设定,您也可以自行修改成自己喜欢的样式啊!
例如,如果您的系统的空间够大,并且担心除错以及骇客的问题,那么可以∶
<ul><span class=text_import2>
<li>将 rotate 4 改成 rotate 9 左右,以保存较多的备份档案;
<li>大部分的登录档不需要 compress 棉!但是空间太小就需要
compress !尤其是很占硬碟空间的 httpd 更需要 compress 的!</span></ul>
好了,上面我们大致介绍了 /var/log/wtmp 这个档案的设定,但是还是不很详细啦,所以底下我们以
/etc/logrotate.d/syslog 这个轮替 syslog 服务的档案,来看看该如何设定他的 rotate 呢∶<br>
<table class="term"><tr><td class="term"><pre>
[root@linux ~]# <span class=term_command>vi /etc/logrotate.d/syslog</span>
/var/log/messages /var/log/secure /var/log/maillog /var/log/spooler
/var/log/boot.log /var/log/cron {
sharedscripts
postrotate
/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
endscript
}
<span class=term_say># 亦即是这样的格式啦!
# 登录档的绝对路径档名 {
# 各项基本上设定值
# }</span>
</pre></td></tr></table>
在上面的语法当中,我们知道正确的 logrotate 的写法为∶
<ul><span class=text_import2>
<li>将要被处理的登录档档名 (包含绝对路径) 写在前面,可以使用空白字元分隔多个登录档;</li>
<li>用 { } 包括所有的设定;</li>
<li>设定的项目与前面提到的相同,并且可加入轮替前 (pre) 与后 (post) 的一些特殊执行的指令!
这个设定需与 sharedscripts .... endscript 设定合用才行;</li>
<ul>
<li><b>prerotate</b>∶在启动 logrotate 之前进行的指令,例如修改登录档的属性等动作;</li>
<li><b>postrotate</b>∶在做完 logrotate 之后启动的指令,例如重新启动
(kill -1 或 kill -HUP) 某个服务!</li>
<li>Prerotate 与 postrotate 对于已经加上了特殊属性的档案处理上面,是相当重要的执行程序!
</ul></span></ul>
也就是说,这一段设定值说明的是∶『 /var/log 目录内的 messages, secure, mailog, spooler,
boot.log 及 cron 这六个档案,每个礼拜进行一次轮替,且保留四个登录档,此外,
在轮替进行完毕之后,执行 syslog 的重新启动』为什么会知道每个礼拜进行一次呢?
呵呵!因为没有提到该设定项目,所以就用 /etc/logrotate.conf 内的预设值来作用啊!<br><br>
好!若假设我们有针对 /var/log/messages 这个档案增加 chattr +a 的属性存在时,
依据 logrotate 的工作原理,我们知道,这个 /var/log/messages 将会被更名成为
/var/log/messages.1 才是。但是由于加上这个 +a 的参数啊,所以,更名是不可能成功的!
那怎么办呢?呵呵!就利用 prerotate 与 postrotate 来进行登录档轮替前、后所需要作的动作啊!
果真如此时,那么你可以这样修改一下这个档案喔!<br>
<table class="term"><tr><td class="term"><pre>
[root@linux ~]# <span class=term_command>vi /etc/logrotate.d/syslog</span>
/var/log/messages /var/log/secure /var/log/maillog /var/log/spooler
/var/log/boot.log /var/log/cron {
sharedscripts
<span class=term_write>prerotate
/usr/bin/chattr -a /var/log/messages
endscript
sharedscripts</span>
postrotate
/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
<span class=term_write>/usr/bin/chattr +a /var/log/messages</span>
endscript
}
</pre></td></tr></table>
看到否?就是先给他去掉 a 这个属性,让登录档 /var/log/messages 可以进行轮替的动作,
然后执行了轮替之后,再给他加入这个属性!请特别留意的是,那个
/bin/kill -HUP ... 的意义,这一行的目的在于将系统的 syslogd
重新以其参数档( syslog.conf )的资料读入一次!也可以想成是 reload 的意思啦!
由于我们建立了一个新的空的纪录档,如果不执行此一行来重新启动服务的话,
那么记录的时候将会发生错误呦!! (请回到资源管理的章节读一下
kill 后面的 signal 的内容说明)!<br><br>
</div>
<hr><a name="rotate_command"></a><img src="../images/penguin-s.gif" alt="小标题的图示" height="23" width="16" align="middle" /><span class=text_h2>实际测试 logrotate 的动作</span><br>
<div class=block2>
好了,设定完成之后,我们来测试看看这样的设定是否可行呢?给他执行底下的指令∶<br>
<table class="term"><tr><td class="term"><pre>
[root@linux ~]# <span class=term_command>logrotate [-vf] logfile</span>
<span class=term_say>参数∶
-v ∶启动显示模式,会显示 logrotate 运作的过程喔!
-f ∶不论是否符合设定档的资料,强制每个登录档都进行 rotate 的动作!
范例∶</span>
<span class=term_hd>范例一∶执行一次 logrotate 看看整个流程为何?</span>
[root@linux ~]# <span class=term_command>logrotate -v /etc/logrotate.conf</span>
reading config file /etc/logrotate.conf
including /etc/logrotate.d
reading config file acpid
reading config info for /var/log/acpid
<span class=term_say>.....(中间省略).....</span>
rotating pattern: /var/log/btmp monthly (1 rotations)
empty log files are rotated, old logs are removed
considering log /var/log/btmp
log does not need rotating
<span class=term_hd>范例二∶强制进行 logrotate 的动作</span>
[root@linux ~]# <span class=term_command>logrotate -vf /etc/logrotate.conf</span>
<span class=term_say>.....(前面省略).....</span>
rotating pattern: /var/log/wtmp forced from command line (1 rotations)
empty log files are rotated, old logs are removed
considering log /var/log/wtmp
log needs rotating
rotating log /var/log/wtmp, log->rotateCount is 1
renaming /var/log/wtmp.1 to /var/log/wtmp.2 (rotatecount 1, logstart 1, i 1),
renaming /var/log/wtmp.0 to /var/log/wtmp.1 (rotatecount 1, logstart 1, i 0),
old log /var/log/wtmp.0 does not exist
renaming /var/log/wtmp to /var/log/wtmp.1
creating new log mode = 0664 uid = 0 gid = 22
removing old log /var/log/wtmp.2
<span class=term_say># 看到否?整个 rotate 的动作就是这样一步一步进行的~</span>
</pre></td></tr></table>
上面那个 -f 具有『强制执行』的意思,如果一切的设定都没有问题的话,那么理论上,您的
/var/log 这个目录就会起变化棉!而且应该不会出现错误讯息才对!嘿嘿!这样就
OK 了!很棒不是吗?!<br><br>
好了,那么预设的 logrotate 什么时候执行呢?呵呵!不用担心,系统已经帮我们设定好了!放在哪里呢?
刚刚不是提过吗?就是放在 /etc/cron.daily/logrotate 里面啊!如果您的版本不是 FC4 ,
那么可以利用 rpm 的相关功能找到这个设定资料喔! ^_^<br><br>
由于 logrotate 的工作已经加入 crontab 里头了!所以现在每天系统都会自动的给他查看
logrotate 棉!不用担心的啦!!只是要注意一下那个 /var/log/messages 里头是否常常有类似底下的字眼∶
<ul><span class=text_import2><font face="细明体">
Oct 24 15:15:35 localhost syslogd 1.4.1: restart.</font></span></ul>
这说明的是 syslogd
重新启动的时间啦 (就是因为 /etc/logrotate.d/syslog 的设定之缘故!)
底下我们来进行一些例题的练习,让您更详细的了解 logrotate 的功用啊!<br><br>
假设前提是这样的,前一小节当中,假设您已经建立了 /var/log/admin.log 这个档案,
现在,您想要将该档案加上 +a 这个隐藏标签,而且设定底下的相关资讯∶
<ul>
<li>登录档轮替一个月进行一次;
<li>该登录档若大于 10MB 时,则主动进行轮替,不需要考虑一个月的期限;
<li>保存五个备份档案;
<li>备份档案不要压缩</ul>
那你可以怎么样设定呢?呵呵~很简单啊!看看底下的动作吧!<br>
<table class="term"><tr><td class="term"><pre>
<span class=term_hd># 1. 先建立 +a 这个属性啊!</span>
[root@linux ~]# <span class=term_command>chattr +a /var/log/admin.log</span>
[root@linux ~]# <span class=term_command>lsattr /var/log/admin.log</span>
-----a------- /var/log/admin.log
[root@linux ~]# <span class=term_command>mv /var/log/admin.log /var/log/admin.log.1</span>
mv: cannot move '/var/log/admin.log' to '/var/log/admin.log.1':permission deny
<span class=term_hd># 2. 开始建立 logrotate 的设定档,增加一个档案在 /etc/logrotate.d 内就对了!</span>
[root@linux ~]# <span class=term_command>vi /etc/logrotate.d/admin</span>
<span class=term_write># This configuration is from VBird 2005/10/24
/var/log/admin.log {
monthly
size=10M
rotate 5
nocompress
sharedscripts
prerotate
/usr/bin/ch
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -