我正在写一个,看守在C我的世界服务器。基本上,它表服务器。日志,获取的最新行分析,如果它符合regex;执行一些行动。

该项目工程的现通常通过"回声串匹配regex>>服务器。日志",它分析并做什么,它应该。然而,当串写的文件自动通过我的世界服务器,它不工作,直到我关闭服务器或者(有时)登出。

我想,但我想知道,如果没有事情要做ext4冲数据的磁盘或东西沿着这些线;文件系统的问题。这将是奇如果情况果真如此,因为"尾f服务器。日志"的更新,每当的文件。

有帮助吗?

解决方案

解决了我自己的问题。事实证明,服务器写入日志文件的速度快于观察者从中读取的速度。所以观察者变得不同步了。

我通过在处理事件后添加一个检查来修复该问题,说“如果当前日志文件中的行数大于日志的记录长度,请重新处理该文件,直到两者相等。”

感谢您的帮助!

其他提示

据推测那是因为你看 IN_CLOSE 事件,这可能不会发生,直到服务器关闭(和关闭录文件处理)。看看 男人,(7) 对有效掩参数 inotify_add_watch() 呼叫。我想你会想要使用 IN_WRITE.

您的理论很可能是正确的,操作系统正在缓冲日志文件,并且日志编写器没有刷新该缓冲区,因此所有内容将保留在缓冲区中,直到关闭文件或缓冲区已满。一种快速的测试方法是,将日志启动到您知道该日志已将事件写入日志的位置,然后强行关闭日志,以使它无法关闭句柄(如果日志为空,则肯定是缓冲区)。如果您掌握了文件句柄/描述符,则可以使用setbuf删除缓冲,而这会降低性能。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top