Chinaunix首页 | 论坛 | 博客
  • 博客访问: 16875
  • 博文数量: 3
  • 博客积分: 86
  • 博客等级: 民兵
  • 技术积分: 56
  • 用 户 组: 普通用户
  • 注册时间: 2011-04-15 18:12
文章分类

全部博文(3)

文章存档

2011年(3)

我的朋友

分类: LINUX

2011-04-27 22:06:42

Redhat登录文件 常见问题及解决方法

----------登陆文件无法写入消息了

    由于笔者还只是个学生,所以博客内容有不对的地方,还望指出、海涵。笔者是学校一个网页开发与维护的兴趣小组的成员之一,参与了部分的网页模块的开发,但主要还是主攻Linux服务器的维护,由于工作需要,使得我们必须开发一个有关于我们小组的,有投票功能的网页,虽然网页不对外部开放,但访问量还是比较多的,经常遇到很多问题,这里笔者小谈一下笔者遇到的一个:在分析系统httpd日志文件的时候,发现日志文件到某一个日期以后不再记录了。这样遇到问题也无法知道,弄了好久,查了些资料才明白原因:

    我用vi编译器打开过日志文件,然后再离开的时候却执行了:wq的命令,导致了syslogd误判该文件已经被改过,导致syslogd不再写入该文件新的内容,其实解决问题很简单,只需要将syslogd重新启动即可,即输入以下命令:

/etc/init.d/syslogd restart

    虽然只需要一个命令就可以解决,但要发现问题,还是要很细心的,希望等给读者一个启发,以便解决您的问题。有人就问了如何避免这个问题呢,Look! 下面会有详细的说明!

下面我们简单来说说有关于日志文件的操作:

    由于笔者的服务器主要是用来做httpd服务的,所以很多日志文件我都可以不细分,但httpd服务的日志文件,我必须的分开,以便能及时发现问题、解决问题。笔者在/etc/syslog.conf内做了设置,将有关于httpd的日志消息放在/var/log/httpd的文件目录下,如图一:

图一

    看到没,在第7行,和第28行我做的设置,我想大家都能看得懂吧,就是把httpd的日志文件放到/var/log/httpd下。

    刚刚可能有人问到了,怎么避免无法写入日志文件呢,还记得chattr这个命令不,还记得它有个+a的参数不,对的,就是它,我们要使用的就是这个属性!你的登录文件如果设定了这个属性的话,那么他将只能被增加,而不能被删除!嗯! 这个项目就非常的符合我们登录档的需求啦!因此,你可以这样的增加你的登录文件的隐藏属性。而且还能防止意外的删除,已达到有些黑客非法登录主机后,为了想掩盖自己的行迹而删除日志文件,具体命令为:

 chattr +a /var/log/httpd/* 

相信大家都知道这是 什么意思吧,这里不解释!

不知道大家知不知道有个轮替的东西,对的就是logrotate,如果要是设置了+a的参数后,那轮替就没用了,那就无法删除了啊,那有什么办法可以解决吗??当然有啊,写一个shell脚本不就好了吗?大家来看看原来logrotate的内容:

下面来解释一下吧:

weekly <==预设每个礼拜对登录档进行一次rotate 的工作

rotate 4 <==保留几个登录档呢?预设是保留四个!

create <==由于登录档被更名,因此建立一个新的来继续储存之意!

#compress <==被更动的登录档是否需要压缩?如果登录档太大则可考虑此参数启动

include /etc/logrotate.d

# 将/etc/logrotate.d/ 这个目录中的所有档案都读进来执行rotate 的工作!

/var/log/wtmp { <==仅针对/var/log/wtmp 所设定的参数

monthly <==每个月一次,取代每周!

minsize 1M <==档案容量一定要超过1M 后才进行rotate (略过时间参数)

create 0664 root utmp <==指定新建档案的权限与所属账号/群组

rotate 1 <==仅保留一个,亦即仅有wtmp.1 保留而已。

}

# 这个wtmp 可记录登入者与系统重新开机时的时间与来源主机及登入期间的时间。

# 由于具有minsize 的参数,因此不见得每个月一定会进行一次喔!要看档案容量。

# 由于仅保留一个登录档而已,不满意的话可以将他改成rotate 5 吧!

下面来解释一下/etc/logrotate.d/syslog吧:

在上面的语法当中,我们知道正确的logrotate 的写法为:

· 檔名:被处理的登录文件绝对路径文件名写在前面,可以使用空格符分隔多个登录档;

· 参数:上述档名进行轮替的参数使用{ } 包括起来;

· 执行脚本:可呼叫外部指令来进行额外的命令下达,这个设定需与sharedscripts .... endscript

设定合用才行。至于可用的环境为:

prerotate:在启动logrotate 之前进行的指令,例如修改登录文件的属性等动作;

postrotate:在做完logrotate 之后启动的指令,例如重新启动(kill -HUP) 某个服务!

Prerotate 与postrotate 对于已加上特殊属性的档案处理上面,是相当重要的执行程序!

那么/etc/logrotate.d/syslog 内设定的六个档案的轮替功能就变成了:

· 该设定只对/var/log/ 内的messages, secure, maillog, spooler, boot.log, cron 有效;

· 登录档轮替每周一次、保留四个、且轮替下来的登录档不进行压缩(未更改默认值);

· 轮替完毕后(postrotate) 取得syslog 的PID 后,以kill -HUP 重新启动syslogd

那要怎么修改轮替文件,才能rotate +a 了的文件呢,只要在prerotate加上一句话就好了,详细如下图:

看到了吧,先—a,在+a,这样就好了,同样的,可以再httpd日志文件下使用,好了,这次就到这里,希望能给您一点帮助!

以上借用到了《鸟哥私房菜》里面的一点东西。

阅读(1236) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~