Linux собирает только измененные журналы каждый день

Есть много способов сделать это. Первый, возможно, менее удобный, это вызов vim с файлами, которые вы хотите отредактировать - создайте:

vim first_file second_file ...

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


Это должно ответить на Ваш вопрос. Но вот более подробная информация:

Есть способ редактировать файлы более удобным способом, разделив экран консоли с помощью vim. Для этого откройте два кадра с помощью :split (:sp) или :vsplit (:vs) при использовании vim. Затем перемещайтесь в этих кадрах, используя комбинацию Ctrl + W > Ctrl + W. Также можно использовать Ctrl + W + стрелка или клавиша (H, J, K или L), соответствующие следующему кадру. После этого отредактируйте нужный файл с помощью :e имя_файла. :help opening-window поможет Вам в этом больше.

Теперь, если Вы хотите увидеть различия между файлами, используйте аргумент -d или вызовите программу vimdiff (это одно и то же) с соответствующими файлами. :help diff поможет вам в этом больше.

vim -d first_file second_file ...

Пожалуйста, дайте мне знать, если у вас возникнет какая-то проблема.

.
1
19.04.2014, 09:37
2 ответа

Простой способ сделать это, если он соответствует вашим потребностям, - это иметь специальный файл журнала, который обновляется каждый день. Сначала вы добавляете в / etc / (r) syslog.conf , вероятно, в самом верху на случай, если есть какие-то правила, которые что-то отбрасывают после регистрации:

*.*           -/var/log/daily.log

Он получит все сообщения; то есть все, что есть в любом другом журнале, будет в этом.

Тогда вам просто понадобится скрипт, который можно запустить через cron. Вы можете использовать для этого logrotate , но в этом случае особого смысла нет.

#!/bin/sh

gzip /var/log/daily.log
# Do whatever with the gzipped file
touch /var/log/daily.log
kill -s HUP `pidof syslogd`   # see below

Этот последний шаг необходим для перезапуска syslogd, поэтому он повторно открывает новый /var/log/daily.log - иначе вы ничего не увидите там после этого. Если вы используете rsyslog, используйте вместо него pidof rsyslogd . Протестируйте, попробовав pidof , который когда-либо был первым.

Наконец, в / etc / crontab :

0 0  * * *  root   /path/to/rotationscript

Будет делать это в полночь каждый день.

2
27.01.2020, 23:28

Рассматривали ли вы возможность использования logrotate ?

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

/var/log/*.log /var/log/auth /var/log/messages {
 daily
 rotate 5
 copytruncate
 compress
 dateext
}

Когда вы его установили, ваш менеджер пакетов уже должен был добавить его в /etc/cron.daily , поэтому вам не нужно делать что-нибудь еще.

В результате вы получите такие журналы, как /var/log/auth.20140420.gz . Если вы хотите собрать их, все, что вам нужно сделать, это найти файлы .gz .

Важные примечания:

В моем примере я намеренно не сделал / var / log / * , хотя в вашем исходном вопросе говорится, что вы хотите повернуть все журналы в / var / журнал . Это связано с тем, что в / var / log есть такие вещи, как utmp и wtmp , которые не являются обычными файлами журнала и не подлежат ротации.

Есть 2 метода ротации журналов.Вы можете переименовать журнал, а затем сказать программе, пишущей журнал, чтобы повторно открыть файл журнала, или вы можете скопировать содержимое файла журнала с новым именем, а затем обрезать оригинал.
Метод перемещения лучше, но в некоторых приложениях нет возможности уведомить их о повторном открытии журнала, поэтому копирование / усечение безопаснее.
Параметр copytruncate - это параметр, который управляет этим поведением. Если вы хотите использовать метод перемещения, удалите его и поместите в раздел postrotate (см. Страницу руководства).

1
27.01.2020, 23:28

Теги

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