Как: Ultimate Logrotate Command Tutorial с 10 примерами
Эффективное управление файлами журналов является важной задачей для системного администратора Linux.
В этой статье мы обсудим, как выполнять следующие операции с файлами журналов с помощью утилиты UNIX logrotate .
- Rotate файла журнала, когда размер файла достигает определенного размера
- Продолжайте записывать информацию журнала во вновь созданный файл после rotate старого файла журнала.
- Сжатие rotate файлов журнала
- Укажите параметр сжатия для rotate файлов журнала
- rotate старые файлы журнала с датой в имени файла
- Выполнять пользовательские сценарии оболочки сразу после ротации журнала
- Удалить старые rotate файлы журнала
1. Logrotate Конфигурационные файлы
Ниже приведены ключевые файлы, которые вы должны знать для правильной работы logrotate.
/usr/sbin/logrotate — сама команда logrotate.
/etc/cron.daily/logrotate — этот сценарий оболочки выполняет команду logrotate каждый день.
$ cat /etc/cron.daily/logrotate #!/bin/sh /usr/sbin/logrotate /etc/logrotate.conf EXITVALUE=$? if [ $EXITVALUE != 0 ]; then /usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]" fi exit 0
/etc/logrotate.conf — в этом файле указана конфигурация ротации журналов для всех файлов журналов.
$ cat /etc/logrotate.conf weekly rotate 4 create include /etc/logrotate.d /var/log/wtmp { monthly minsize 1M create 0664 root utmp rotate 1 }
/etc/logrotate.d — Когда в системе установлены отдельные пакеты, они удаляют информацию о конфигурации ротации журналов в этом каталоге. Например, информация о конфигурации yum log rotate показана ниже.
$ cat /etc/logrotate.d/yum /var/log/yum.log { missingok notifempty size 30k yearly create 0600 root root }
2. Опция Logrotate size: rotate файл журнала, когда размер файла достигает определенного предела
Если вы хотите rotate файл журнала (например, /tmp/output.log) для каждого 1 КБ, создайте файл logrotate.conf, как показано ниже.
$ cat logrotate.conf /tmp/output.log { size 1k create 700 bala bala rotate 4 }
Эта конфигурация logrotate имеет следующие три параметра:
- size 1k — logrotate запускается, только если размер файла равен (или больше) этого размера.
- создать — rotate исходный файл и создать новый файл с указанным разрешением, пользователем и группой.
- rotate — ограничивает количество rotate файла журнала. Таким образом, это сохранит только последние 4 rotate файла журнала.
Перед журналированием следующий размер: output.log:
$ ls -l /tmp/output.log -rw-r--r-- 1 bala bala 25868 2010-06-09 21:19 /tmp/output.log
Теперь запустите команду logrotate, как показано ниже. Опция -s указывает имя файла для записи статуса logrotate.
$ logrotate -s /var/log/logstatus logrotate.conf
Примечание: всякий раз, когда вам нужно ротации журналов для некоторых файлов, подготовьте конфигурацию logrotate и выполните команду logroate вручную.
После logrotation, следующий размер файла output.log:
$ ls -l /tmp/output* -rw-r--r-- 1 bala bala 25868 2010-06-09 21:20 output.log.1 -rwx------ 1 bala bala 0 2010-06-09 21:20 output.log
В конечном итоге это продолжит следовать настройке rotate файлов журнала.
- output.log.4.
- output.log.3
- output.log.2
- output.log.1
- output.log
Помните, что после ротации журнала файл журнала, соответствующий службе, все равно будет указывать на rotate файл (output.log.1) и будет продолжать запись в него. Вы можете использовать описанный выше метод, если хотите rotate apache access_log или error_log каждые 5 МБ.
В идеале вы должны изменить /etc/logrotate.conf, чтобы указать информацию logrotate для конкретного файла журнала.
3. Опция Logrotate copytruncate: Продолжайте записывать информацию журнала во вновь созданный файл после rotate старого файла журнала.
$ cat logrotate.conf /tmp/output.log { size 1k copytruncate rotate 4 }
copytruncate дает команду logrotate для создания копии исходного файла (т. е. ротации исходного файла журнала) и обрезания исходного файла до нулевого байтового размера. Это помогает соответствующей службе, которая принадлежит этому файлу журнала, записывать в соответствующий файл.
В то время как работа с файлами журналы, вы можете найти sed substitute, sed delete советы полезны.
4. Параметр сжатия Logrotate: сжатие rotate файлов журнала.
Если вы используете параметр сжатия, как показано ниже, rotate файлы будут сжаты утилитой gzip.
$ cat logrotate.conf /tmp/output.log { size 1k copytruncate create 700 bala bala rotate 4 compress }
Вывод сжатого файла журнала:
$ ls /tmp/output* output.log.1.gz output.log
5. Logrotate dateext опция: rotate старый файл журнала с датой в имени файла журнала
$ cat logrotate.conf /tmp/output.log { size 1k copytruncate create 700 bala bala dateext rotate 4 compress }
После вышеуказанной конфигурации вы увидите дату в rotate файле журнала, как показано ниже.
$ ls -lrt /tmp/output* -rw-r--r-- 1 bala bala 8980 2010-06-09 22:10 output.log-20100609.gz -rwxrwxrwx 1 bala bala 0 2010-06-09 22:11 output.log
Это будет работать только один раз в день. Потому что, когда он попытается rotate в следующий раз в тот же день, ранее rotate файл будет иметь то же имя файла. Таким образом, logrotate не будет успешным после первого запуска в тот же день.
Обычно вы можете использовать tail -f, чтобы просмотреть вывод файла журнала в реальном времени. Вы даже можете объединить несколько выходных данных tail -f и отобразить их на одном терминале.
6. Logrotate ежемесячно, ежедневно, еженедельно вариант: rotate файл журнала еженедельно / ежедневно / ежемесячно
Для выполнения ротации ежемесячно один раз,
$ cat logrotate.conf /tmp/output.log { monthly copytruncate rotate 4 compress }
Добавьте еженедельное ключевое слово, как показано ниже, для еженедельного ротации журнала.
$ cat logrotate.conf /tmp/output.log { weekly copytruncate rotate 4 compress }
Добавьте ключевое слово daily, как показано ниже, для ротации журналов за каждый день. Вы также можете rotate журналы ежечасно.
$ cat logrotate.conf /tmp/output.log { daily copytruncate rotate 4 compress }
7. Параметр Logrotate postrotate endcript: запуск пользовательских сценариев оболочки сразу после ротации журнала.
Logrotate позволяет вам запускать собственные сценарии оболочки после завершения ротации файла журнала. Следующая конфигурация указывает, что он выполнит myscript.sh после входа в систему.
$ cat logrotate.conf /tmp/output.log { size 1k copytruncate rotate 4 compress postrotate /home/bala/myscript.sh endscript }
8. Опция Logrotate maxage: удаление старых rotate файлов журнала.
Logrotate автоматически удаляет rotate файлы через определенное количество дней. В следующем примере показано, что rotate файлы журнала будут удалены через 100 дней.
$ cat logrotate.conf /tmp/output.log { size 1k copytruncate rotate 4 compress maxage 100 }
9. Опция Logrotate missingok: не возвращать ошибку, если файл журнала отсутствует
Вы можете игнорировать сообщение об ошибке, когда фактический файл недоступен, используя эту опцию, как показано ниже.
$ cat logrotate.conf /tmp/output.log { size 1k copytruncate rotate 4 compress missingok }
10. Опция Logrotate compresscmd и compressext: укажите команду сжатия для ротации файла журнала.
$ cat logrotate.conf /tmp/output.log { size 1k copytruncate create compress compresscmd /bin/bzip2 compressext .bz2 rotate 4 }
Следующие параметры сжатия указаны выше:
- compress — указывает, что сжатие должно быть сделано.
- compresscmd — укажите, какой тип команды сжатия следует использовать. Например: /bin/bzip2
- compressext — укажите расширение для rotate файла журнала. Без этой опции у rotate файла будет расширение по умолчанию .gz. Поэтому, если вы используете bzip2 compresscmd, укажите расширение как .bz2, как показано в примере выше.