Поиск в файле iptables.log занимает много времени

Файл управления статичен так не, Вы не можете изменить зависимости от некоторых внешних параметров, но политика Debian указывает | как способ указать альтернативные имена пакета, в Вашем случае это было бы что-то как:

Depends: Package1 | Package2

где Package1 зависимость по умолчанию.

0
29.07.2014, 14:53
3 ответа

попробуйте, возможно, a

cat iptables.log | sed -n "/PatternYouLookat/ p"

таким образом, Вы не блокируете файл во время sed

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

Вы могли использовать sed-u, чтобы работать потоком и избежать некоторой буферной проблемы на огромном файле

1
28.01.2020, 02:52

Я предполагаю, что Вы используете системный журнал. И я предполагаю, что sed оперативное редактирование на самом деле упаковывает новый файл в ящики и удаляет старый.

Системный журнал очень хрупок, если Вы вращаетесь/воссоздаете файлы журнала, не уведомляя его. То, что Вы видите, точно, что происходит: системный журнал ничего не регистрирует в файл даже при том, что он действительно существует. Это вызвано тем, что системный журнал все еще имеет старый дескриптор файла и пишет в старый файл (даже при том, что Вы больше не видите его с ls и т.д.). Как только системный журнал закрывает этот дескриптор файла, данные исчезают в нирване.

Я был бы reccomend как devnull для использования logrotate вместо этого. Если Вы не хотите, то выпускаете перезагрузку системного журнала или перезапуск после Вашего вызова sed. Это должно, надо надеяться, добиться цели.

0
28.01.2020, 02:52
  • 1
    только для подтверждения: sed действительно воссоздает его. Можно проверить, что с ls - литий на файле журнала и Вы будете видеть, что inode число изменилось после редактирования (первое поле). –   18.10.2013, 13:48

Используйте лог-вращение. Обычно вы поворачиваете каждую ночь или каждую неделю, но вы можете изменить это к тому, что вам нужно. Единственная загвоздка в том, что это может означать, что iptables необходимо перезапустить после вращения, что обрабатывается логротатом. Я не знаю, нужно ли это, и не является ли это (или частота) проблемой для вас или вашего приложения.

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

  • Скажем, у вас есть лог-файл access.log.
  • Logrotate обычно переименовывает его в access.log-20140729.
  • Вместо даты можно использовать число: access.log.1.
  • Вы можете запустить другой cronscript, который изменяет access.log.1, используя sed.
  • При следующем повороте этот файл переименовывается в access.log.2, со всеми вашими изменениями.
  • Последний файл access.log переименован в access.log.1, который затем может быть изменен с помощью sed.
  • Создается новый access.log и т.д...
0
28.01.2020, 02:52

Теги

Похожие вопросы