Назад | Перейти на главную страницу

Logrotate добавляет «1» в конец сжатого файла.

У меня есть сценарий, который запускается как cronjob каждые 30 минут и принимает mysqldump для некоторых таблиц. Файлы дампа хранятся в / var / log / как

/var/log/mysqldump/dbname/tablename/2014-06-15-18-30-dbname-tablename.sql
/var/log/mysqldump/dbname2/tablename2/2014-06-15-19-00-dbname2-tablename2.sql

Я использую logrotate для ротации файлов, конфигурационный файл имеет следующую структуру:

/var/log/mysqldump/dbname/tablename/*.sql {
  daily
  rotate 30
  compress
  nocreate
}

Теперь моя проблема в том, что хотя logrotate работает нормально, но он добавляет «1» или «2» в конце сжатых файлов, например, это то, что у меня

/var/log/mysqldump/dbname2/tablename2/2014-06-15-19-30-dbname2-tablename2.sql.1.gz
/var/log/mysqldump/dbname1/tablename1/2014-06-15-19-00-dbname1-tablename1.sql.2.gz

Я выполняю logrotate из скрипта как

logrotate -f /path/to/mysqldump-logrotate.conf

Что я здесь делаю не так?

Вы не делаете ничего плохого, это стандартное и ожидаемое поведение. Если вам нужно другое расширение, например дату, вы можете указать dateext

dateext Архивируйте старые версии файлов журнала, добавляя ежедневное расширение, например ГГГГММДД, вместо простого добавления числа. Расширение можно настроить с помощью опции dateformat.

Из приведенного выше вы также можете увидеть, что поведение по умолчанию, как ожидается, будет simply adding a number.

Logrotate по умолчанию добавит номер в файл. Это так, что если он используется для имен файлов, например, /var/log/messages, повернутые журналы будут названы /var/log/messages.0 и /var/log/messages.1 и т.п.

Ваша ситуация несколько иная, поскольку у вас уже есть отметка времени в имени файла, поэтому расширение не нужно. Logrotate не имеет возможности не использовать расширение, но есть обходной путь, который вы можете использовать.

Альтернативой использованию числовой серии является использование даты / времени. По умолчанию это -%Y%m%D, например -20140618. Но вы можете настроить, как должна выглядеть строка - в вашем случае это будет пустая строка. Вы бы сделали это, используя следующую конфигурацию:

dateext          # to use dateformat string instead of sequential numbers
dateformat ''    # to use an empty string as the dateext

У вас есть возможность rotate 30 в вашей конфигурации, что означает, что 30 старых версий сохраняются перед удалением. Этот номер показывает, как logrotate различает версии. Итак, по сути, вы не делаете ничего плохого, и программа ведет себя так, как задумано.

Это нормальное поведение для logrotate, как вы его описали.

Обычно вам нужно выполнять лог-ротацию файлов журналов не через скрипт, а через cronjob (s).

Для сжатия файлов с помощью logrotate вы не можете включать дату и позволить logrotate обрабатывать dateext.

Итак, для «решения» вашей проблемы вы можете использовать параметры logrotate

dateext 

и пропустите запись дня в имя файла.

Это приведет к «удалению» единицы, которую вы видите в имени файла.