Как: 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, как показано в примере выше.