⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 0570syslog.htm

📁 鸟哥的linux私房菜
💻 HTM
📖 第 1 页 / 共 5 页
字号:
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 + -