perl File ::尾部同步

时间:2011-05-18 14:55:59

标签: perl synchronization daemon tail

我有这种情况: 我使用perl守护进程解析一些日志文件。该守护进程将数据写入mysql db。

日志文件可以:

  1. 旋转('通过文件大小和某些逻辑'解决)
  2. 不存在(Tail中的'ignore_nonexistant'参数)
  3. 守护程序:

    1. 可以被杀
    2. 一些reazon可能会死。
    3. 我正在使用File :: Tail来尾随文件。对于创建日期或文件大小的文件轮换机制可以提供帮助。我应该使用什么机制从文件中的某个位置开始尾部? (假设有很多这样的守护进程,没有对文件系统的写访问权。)

      我在DB中考虑过位置变量,但这对我没有帮助。

      也许有一些机制可以将位置参数传递给parrent进程?

      我只是不想重新发明自行车。

2 个答案:

答案 0 :(得分:2)

File :: Tail已经检测到旋转并继续从新文件中读取。

要处理守护程序死亡并重新启动,您可以在数据库中查询守护程序重新启动时写入的最后一条记录吗?只需跳过日志文件行,直到到达更晚的行?

答案 1 :(得分:2)

试试http://search.cpan.org/dist/Log-Unrotate/。 如果您希望将位置文件存储在DB而不是本地文件系统中,则必须实现自己的Log::Unrotate::Cursor类,但这应该是微不足道的。

我们在生产中编写并使用了Log::Unrotate 5年,并且很难从不跳过任何数据。 (如果你的光标变得无效,它会非常努力地抛出异常,例如,当读者由于某种原因无法工作时,日志被多次旋转。你可能想要启用autofix_cursor选项来改变这种行为)。

另请查看http://search.cpan.org/dist/File-LogReader/。我从未使用它,但它应该解决相同的任务。