Вопрос: Есть ли способ очистить журналы?


Мне было интересно, есть ли способ очистить журналы вообще?

Я новичок в Ubuntu, и я пытаюсь настроить Postfix. Этот вопрос /var/log/mail.log, Мне было интересно, есть ли правильный способ его очистить, вместо того, чтобы входить в него и удалять все строки и сохранять их. Я обнаружил, что иногда ошибки не записываются сразу после того, как я очистил журнал и сохранил его.

Боковое замечание: у меня возникают проблемы с настройкой Postfix, и я пытаюсь облегчить чтение журналов, надеясь, что это поможет мне, вместо того, чтобы прокручивать весь путь вниз.


52
2018-06-30 16:13


Источник


если вы хотите просто увидеть конец файла, тогда хвост твой друг. tail /var/log/mail.log, чтобы отобразить последние 5 строк. tail -f /var/log/mail.log, чтобы увидеть все строки, написанные в конце файла. - Iain
serverfault.com/questions/285843/... - poige


Ответы:


Вы можете использовать:

> /var/log/mail.log

Это приведет к обрезанию журнала без необходимости редактирования файла. Это также надежный способ вернуть пространство обратно. Когда-то люди делают ошибку при использовании rm в журнале, а затем воссоздают имя файла, если другой процесс имеет открытый файл, тогда вы не получите пространство до тех пор, пока этот процесс не закроет его дескриптор, и вы можете испортить его разрешения.

Также, если вы просматриваете содержимое журнала, вы можете использовать tail команда:

tail -f /var/log/mail.log

Ctrl-C разорвет хвост.


66
2018-06-30 16:20



/bin/csh (распространенный для FreeBSD), выйдет за это с помощью «Invalid null command», между тем zsh (популярная замена для bash) будет ждать EOF. Видеть serverfault.com/a/381380/67675 - poige


Да, есть правильный способ: вы не Чисто журналы вообще. Вы вращаться их. Поворот включает в себя вывод журнала журналов в новый файл под тем же именем с предыдущими файлами журнала N, хранящимися под набором N связанных имен файлов.

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

Если программа, записывающая файл журнала, multilog из daemontools пакет, например, тогда вы ничего не делаете, чтобы вращать журналы вообще - никаких ручных скриптов, нет cron рабочие места. Просто скажите multilog этот выход журнала относится к каталогу, и он сам будет поддерживать автоматически повернутый и ограниченный размерами набор из N файлов журнала в этом каталоге.

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

Если вы используете rsyslog для записи журналов, затем программа ведения журнала может быть остановлена ​​после того, как файл журнала достигнет определенного размера и запустит скрипт, Вы должны написать мясо скрипта, чтобы фактически переименовать файл журнала и удалить старые файлы журналов на основе общих ограничений по размеру, но по крайней мере программа протоколирования закрыла файл и приостановила запись журнала, пока это происходит.

Старый syslogd способ вращения журналов, все еще ожидаются при регистрации таких программ, как syslog-ng и, как показано на примере таких инструментов, как logrotateупомянутый djangofan в другом ответе здесь, несколько более беспорядочно. Один запускает cron задание, которое периодически переименовывает файлы журналов и перезапускает демона регистрации (используя любой выполняемый под ним диспетчер демона). Проблема с этим, конечно же, заключается в том, что она не обеспечивает общий размер крышки. В медленные недели можно получить N очень маленьких ежедневных файлов журнала, тогда как в дни занятости можно получить 1 очень большой файл журнала, который значительно превышает лимит размера.

Вот почему более поздние и лучшие инструменты, такие как multilog а также svlogd конечно, имеют параметры конфигурации размера файла и, конечно же, сами проверяют размеры файлов журнала. Мир узнал, что опрос журналов по расписанию с cron рабочих мест или даже logrotate демон, оставляет окна размером не по правилам, и что надлежащее место для этих проверок и так rigourously применять ограничения размера, определенные администратором, чтобы файлы журналов никогда не проглатывали раздел, в котором они находятся, находится в программе, которая на самом деле записывает файлы в первую очередь.


21
2017-07-01 10:58



Что касается rsyslog, его можно легко настроить так, чтобы полагаться на имена файлов, описанные «шаблоном», включая, например, YEAR, MONTH и DAY. Это так же просто, как иметь template(name="DYNmail" type="string" string="/var/log/%$YEAR%/%$MONTH%/%$DAY%/mail.log") директивы, а затем if ($syslogfacility-text == 'mail') then -?DYNmail;TraditionalFormat, Таким образом, лог-ротация - это просто проблема, по крайней мере, когда один файл в день в порядке. Для очень больших объемов журнала (требуется многократное вращение в день), существует $HOUR также. - Damiano Verzulli


Да, есть инструмент для linux, называемый LogRotate ,


10
2018-06-30 16:36



Просто небольшая коррекция: это не сервис, это инструмент, обычно работающий от службы cron. - rvs


Если причина, по которой вы очищаете журнал, - это свободное пространство, вы можете использовать cat / dev / null, не прерывая программы, записывающие в него. Никогда не удаляйте их! какое-то программное обеспечение может жаловаться, прекратив работу или полностью игнорируя журнал до следующего перезапуска

cat /dev/null > /path/to/logfile

# to empty all the logs in a directory
for i in /var/log/*; do cat /dev/null > $i; done

7
2018-04-20 00:55



Чтобы очистить лог-файлы рекурсивно: for i in $(find /var/log -type f); do cat /dev/null > $i; done - Iurie


Вы можете использовать это тоже ..

truncate /opt/package/logs/*.log --size 0

Здесь все файлы журналов в каталоге / opt / package / log станут пустыми.


4
2018-06-25 05:32



Я не понимаю, как это может быть лучше, чем более старые ответы. - kasperd
На самом деле это очень хороший ответ, и на самом деле единственный, который напрямую отвечает на вопрос о том, есть ли способ обрезать лог-файлы. КАК это лучше, чем другие ответы - это не УДАЛИТЬ файл журнала, он правильно заполняет содержимое, поэтому ошибки разрешения и отсутствующие лог-файлы, которые приводят к панике в некоторых случаях, в этом случае не будут. - hmedia1


Короткая и совместимая запись содержимого: : > /dest/file

Но есть также системный вызов truncate (2) и соответствующий инструмент пользовательского пространства truncate на многих * NIX'ах.


3
2018-04-20 01:25





Если вы хотите сохранить файл перед его очисткой, вы можете сделать следующее:

cp /var/log/mail.log /var/log/mail.log.1 && echo -n "" > /var/log/mail.log

Если вы хотите выполнить поиск определенного текста или электронной почты в журнале, вы можете использовать grep. Если вы хотите сохранить графику использования почты, вы можете использовать AWStats.


0
2018-06-30 16:25