im 遇到这种情况:我正在使用perl守护程序解析一些日志文件。此守护程序将数据写入 mysql db。
日志文件可以:
- 旋转("通过文件大小和一些逻辑解决")
- 不存在(尾巴中的"ignore_nonexistant"参数)
守护 进程:
- 可以杀死
- 可以死了某个雷亚松。
我正在使用文件::尾巴到尾部文件。对于创建日期或文件大小的文件轮换机制可以提供帮助。我应该使用什么机制从文件中的某个位置启动尾巴?(因为有很多这样的守护进程,没有对文件系统的写入访问权限)。
我已经考虑过数据库中的位置变量,但这对我没有帮助。
也许是将位置参数传递给parrent过程的某种机制?
我只是不想重新发明自行车。
File::Tail 已经检测到旋转并继续从新文件中读取。
为了处理守护程序死亡和重新启动,是否可以在数据库中查询守护程序重新启动时写入的最后一条记录,并跳过日志文件行,直到到达后面的行?
尝试 http://search.cpan.org/dist/Log-Unrotate/。如果您希望将位置文件存储在 DB 而不是本地文件系统中,则必须实现自己的 Log::Unrotate::Cursor
类,但这应该是微不足道的。
我们在生产中编写和使用Log::Unrotate
5 年,它非常努力地从不跳过任何数据。(它非常努力,以至于如果您的光标无效,例如,如果日志被旋转了几次,而读取器由于某种原因无法工作。您可能希望启用autofix_cursor
选项来更改此行为)。
也看看 http://search.cpan.org/dist/File-LogReader/。我从未使用过它,但它应该解决相同的任务。