每次更改文件时运行程序

时间:2011-07-08 06:24:18

标签: mysql linux daemon squid

好的,这就是我想要做的。我的网络服务器(运行openSuSE 11.1)上有一个squid代理设置,每次在access.log中添加一个新条目时,我都想将访问信息转储到MySQL数据库。我这样做的最佳方法是什么?

目前,我正在考虑编写一个守护程序来检查文件的变化,例如每2-3秒,但我不认为这是一种非常有效的方法。我可以通过其他方式实现这一目标吗?

4 个答案:

答案 0 :(得分:2)

答案 1 :(得分:1)

我建议您直接将squid日志记录到数据库中,或者有一个(持续运行的)守护进程(在名称上)在日志文件中执行“tail -f”,插入记录。

根据您可以容忍的数据丢失量,您可能需要做很多技巧来记住您以持久方式到达的文件中的“点”(比如数据库中的一个小表,您在其中写入相同的交易)等。正确地做这件事并不重要,但是,它可以做到。

通常你会想要异步执行此操作,因为squid可能会比mysql更快地创建文件中的记录,特别是当它处于offilne时。

您还需要批量处理记录,因为插入单个记录的效率相对较低。

答案 2 :(得分:0)

我找到的最佳解决方案,对我的要求非常具体,是对squid使用'redirect_program':http://wiki.squid-cache.org/Features/Redirectors

这完全符合我的目的,并在程序中提供足够的信息来完成我的工作。

感谢paulsm4提供完美的解决方案,以防这种功能无法使用。

答案 3 :(得分:0)

不知道这是否有效,但也许您可以使用 CSV storage engine 创建一个表,并让squid代理直接写入创建的table.CSV文件而不是{ {1}}一个。