Запускайте программу каждый раз, когда файл изменяется - PullRequest
1 голос
/ 08 июля 2011

Хорошо, это то, что я хочу сделать.У меня есть настройка прокси-сервера squid на моем веб-сервере (на котором работает openSuSE 11.1), и каждый раз, когда в access.log добавляется новая запись, я хочу сбросить информацию о доступе в базу данных MySQL.Каков наилучший для меня способ сделать это?

В настоящее время я думаю о написании демона, который проверяет изменения файла каждые 2-3 секунды, но я не думаю, что это оченьэффективный подход.Каким другим способом я мог бы достичь этого?

Ответы [ 4 ]

2 голосов
/ 08 июля 2011
1 голос
/ 08 июля 2011

Я рекомендую вам вести журнал squid непосредственно в базу данных или иметь (постоянно запущенный) демон, который (условно) выполняет "tail -f" в файле журнала, вставляя записи.

В зависимости от того, сколькоПотеря данных, которую вы можете терпеть, вам может понадобиться сделать много трюков, запоминая «точку» в файле, которого вы достигли надежным способом (скажем, небольшую таблицу в базе данных, в которую вы записываете в той же транзакции) и т. д.нетривиально правильно сделать это, однако, это может быть сделано.

Обычно вы хотите делать это асинхронно, так как squid может создавать записи в файле быстрее, чем mysql может их принять, особенно когда он отключен.

Вам также понадобится пакетироватьзаписи, так как вставка одной записи является относительно неэффективной.

0 голосов
/ 08 июля 2011

Не знаю, сработает ли это, но, возможно, вы можете создать таблицу с механизмом хранения CSV и иметь прокси-сервер squid, пишущий непосредственно в созданный файл table.CSV вместо access.log один.

0 голосов
/ 08 июля 2011

Лучшее решение, которое я нашел, которое очень специфично для моего требования, это использовать 'redirect_program' для Squid: http://wiki.squid -cache.org / Features / Redirectors

Это работаетидеально подходит для моих целей и дает мне достаточно информации в программе, чтобы делать свое дело.

Благодаря paulsm4 для идеального решения в случае, если такая функция недоступна.

...