Назад | Перейти на главную страницу

Ведение журнала не прекращается в файле журнала после его переименования / перемещения… как это остановить?

Только что обнаружил, что logrotate не меняет журнал нашего брандмауэра. Так что это размер до 12G.

Мне нужно разбить файл на более мелкие куски и начать вручную вращать их, чтобы я мог вернуть все в нужное русло.

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

Я попытался просто сделать это:

mv firewall firewall.old
touch firewall

Я ожидал увидеть, что новый пустой файл брандмауэра начнет увеличиваться в размере, но нет ... firewall.old все еще находится в системе.

Затем я попытался запустить / остановить iptables. Без изменений. firewall.old по-прежнему остается файлом журнала.

Пытался переместить в другой каталог. Это не помогло.

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

Как мне остановить регистрацию этого файла и заставить его начать регистрацию нового файла?

iptables использует средство системного журнала для ведения журнала. Отправьте SIGHUP в syslogd, ksyslogd или rsyslogd, чтобы закрыть и снова открыть файлы журнала.

Запись файла журнала не выполняется iptables. iptables просто регистрируется в системе системного журнала ядра, и ваша программа системного журнала может записать ее в файл журнала. Когда вы перемещаете файл, вы просто переименовываете его с точки зрения файловой системы. Ваш демон системного журнала не знает, что вы это сделали, и продолжает писать в свой открытый дескриптор файла. Что вам нужно сделать, так это перезагрузить демон системного журнала, чтобы он повторно открыл файл на основе пути в файловой системе и начал запись в новый файл. Большинство демонов системного журнала для этого поддерживают перехват сигнала HUP и не требуют полного перезапуска.

Вы должны использовать такую ​​программу, как logrotate, которая предустановлена ​​в большинстве дистрибутивов, чтобы выполнять ротацию за вас. Он продуман и поддерживает такие действия, как сигнальные демоны. Для этого не нужно накатывать собственный скрипт.

Ваши файлы конфигурации для logrotate должны включать секцию postrotate, которая перезагружает syslog или rsyslog или эквивалент SIGHUP.

В моей системе /etc/logrotate.d/rsyslog содержит, среди прочего:

    postrotate
            reload rsyslog >/dev/null 2>&1 || true
    endscript

Вы можете сделать копию своего файла системного журнала:

cp -abf sys.log sys.log_bak

И переместите копию в любое желаемое место:

mv sys.log_bak /path/desired/sys.log_bak

И очистите содержимое исходного файла:

кошка / dev / null> sys.log

Ваш исходный файл будет продолжать получать системные журналы после этого; вам не нужно заменять его другим файлом.