为什么syslog在编辑某些日志后停止写日志?

时间:2012-06-15 08:50:44

标签: linux logging messages syslog

我使用centos5.8 我想知道为什么syslog在某些日志编辑后停止写日志。

例如,在删除/ var / log / messages行之后,syslog不会写新日志。 只留下旧日志。

但是如果我删除了消息文件并重启系统,那么syslog工作正常。

有没有办法,syslogd在编辑某些日志后连续编写新日志?

3 个答案:

答案 0 :(得分:1)

这取决于文件的编辑方式。

请记住,syslogd会保持文件处于打开状态以便继续写入。如果编辑器在unlink()rename()旧文件之后使用旧名称写入新文件,则该旧文件仍然在syslogd中运行。但是,新文件仍未改变。

可以通知有关HUP信号使用的新文件。

答案 1 :(得分:1)

那么,这取决于syslogd的工作原理。我应该提一下,编辑系统日志文件可能,顺便说一下: - )

您可能已经被UNIX文件系统的工作方式所困扰。

如果进程A打开了一个文件并且正在写入该文件,那么进程B可以继续删除该文件(使用类似rm的文件,或者在编辑会话中删除旧文件归档并重写一个新的。)

删除该原始文件会破坏数据,它只会破坏文件名(目录条目)与该数据之间的链接。

原始文件打开的进程可以继续写入,只要它需要,并且由于文件系统中没有条目,因此您不能(轻松)看到它。

具有该文件名的 new 文件可能会被买入,但是进程A不会写入它,它将写入原始文件。旧文件和新文件之间没有任何关联。

当你的磁盘空间不足并决定删除大量文件以稍微清除它时,你有时会看到这种效果。如果进程打开了这些文件,那么删除它们对你来说根本不会有用,因为空间仍然在使用(而且很可能会增加使用率)。

你必须同时删除文件以某种方式说服那些让它们打开以放弃它们的进程。

答案 2 :(得分:0)

如果您编辑了/ var / log / syslog,则需要在之后重新启动syslog服务,因为syslogd需要再次打开文件句柄。