Только что обнаружил, что 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
Ваш исходный файл будет продолжать получать системные журналы после этого; вам не нужно заменять его другим файлом.