red hat /var/run/utmp,/var/log/wtmp 文件不能正確更新!
單位的服務器,原來是Suse8.0+informix9.2,後來昇到red hat enterprise 3.0+informix9.4(換成red hat 是因為informix9.4與Suser8.0不兼容).結果就出現了這個問題.
一開始發現用who,w不能正確顯示user信息,不管有多少個user登陸退出,who命令每次顯示同樣的內容,w則顯示不出user;重啟好了,一段時間後問題又出現;
經過研究發現此問題是由於/var/run/utmp和/var/run/wtmp不能被正確更新造成的(who和w都是讀取utmp來顯示user信息的);正常情況下,一個user登陸,umtp和wtmp都會被寫入一條關與user登陸的信息,user退出後此信息被更新表示用戶退出;但在出現問題後,不管有多少個user登陸退出utmp就是死活更新不了,而wtmp則登陸的時候會有user信息寫入,但user退出時信息不會被更新,還保持登陸狀態;
最令我faint的是當用vi 命令編輯/var/run/utmp,當然顯示的都是亂嗎,隨便刪掉一行,保存退出,utmp就可以被寫入了,但一段時間後就又不可以寫入;又或者將utmp文件copy成另外一文件,將utmp刪掉,再將復制文件名改成utmp,utmp文件也可以被寫入了;
在出現此問題後,user登陸時輸完進入系統明顯有停頓感,應該也是由於utmp文件寫不進去造成的;這個問題都快把我折騰的不行了.我們單位的3個事業處服務器都有這樣的問題.把utmp文件清空了,好了,一段時間後又不行了.後來把enterprise3.0換成red hat9.0還是有這樣的問題.而我們集團的其他事業處的服務器都是red hat很早的版本確沒這樣的問題,真是鬱悶呀!
用man utmp查看命令手冊有這麼一段:
Note that the utmp struct from libc5 has changed in libc6. Because of
this, binaries using the old libc5 struct will corrupt /var/run/utmp
and/or /var/log/wtmp. Debian systems include a patched libc5 which
uses the new utmp format. The problem still exists with wtmp since
中文翻譯(網上找的)就是
需要注意的是在 libc5 和 libc6 中 utmp 的结构是不同的.因此使用旧结构的程序会破
坏 /var/run/utmp 和/or /var/log/wtmp. Debian 系统包含一个修补过的 libc5 它可
以使用新的格式. 但对 wtmp, 问题依然存在因为它直接对 libc5 进行存取.
有那位大蝦知道問題原因的,請不吝賜教,感激不盡!