我使用centos5.8 我想知道为什么syslog 在某些日志编辑后停止写入日志。
例如,在切断 /var/log/messages 行后,syslog 不会写入新日志。只剩下旧日志。
但是如果我删除消息文件并重新启动系统,syslog 工作正常。
有什么办法,syslogd在编辑某些日志后不断写入新日志?
好吧,这将取决于 syslogd 的工作方式。我应该提一下,顺便说一下,编辑系统日志文件可能不是一个好主意:-)
您可能已经被 UNIX 文件系统工作方式的一个特点所吸引。
如果进程 A 有一个文件打开并正在写入它,进程 B 可以去删除该文件(使用类似的东西,rm
或者,在这里似乎很可能,在删除旧文件并重写新文件的编辑会话中)。
删除该原始文件不会破坏数据,它只会破坏文件名(目录条目)和该数据之间的链接。
打开原始文件的进程可以根据需要继续写入它,并且由于文件系统中没有它的条目,因此您无法(轻松)看到它。
可以购买具有该文件名的新文件,但进程 A 不会写入它,它将写入原始文件。新旧文件之间不会有任何联系。
当您的磁盘空间不足并决定删除大量文件以稍微清理它时,您有时会看到这种效果。如果进程打开了这些文件,则删除它们对您毫无帮助,因为空间仍在使用中(而且很可能使用量正在增加)。
您必须同时删除文件并以某种方式说服保持它们打开的那些进程放弃它们。
这取决于文件的编辑方式。
请记住,syslogd
保持文件打开以进行连续写入。unlink()
如果您的编辑器在ing 或ing 旧文件之后使用旧名称写入新文件,则rename()
该旧文件仍可用于 syslogd。但是,新文件保持不变。
它可以被告知要与HUP
信号一起使用的新文件。
如果您编辑了 /var/log/syslog 之后需要重新启动 syslog 服务,因为 syslogd 需要再次打开文件句柄。