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

Как logrotate взаимодействует с жестко связанными файлами?

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

Если я настрою logrotate для управления этими файлами журналов, будет ли он работать должным образом (чередовать журналы, поддерживать работу моих ссылок)? Или logrotate случайно разорвет ссылки и оставит журналы, накапливающиеся в своих родных местах, но не в моем центральном?

Я считаю, что могу настроить logrotate для воссоздания жестких ссылок после ротации, если это необходимо. Но нужно ли это?

Не ссылаться на файлы: ссылка на каталог. Если вы установите ссылку на файл, у вас могут возникнуть проблемы, когда приложение создает новый файл журнала, либо как часть ротации журнала (в зависимости от того, как это делается), либо когда вы останавливаете, а затем перезапускаете приложение.

ln -s /path/to/where/application/creates/logs/ /var/log/application

Я думаю, вы можете использовать символические ссылки на желаемое новое местоположение и указать logrotate повернуть журналы в той папке, в которой они фактически находятся; ln -s /path/file /path/to/newlink

Чтобы ответить на ваш вопрос, это зависит от того, какое вращение вы делаете. Например, произойдет следующая прогрессия:

Метод копирования и усечения:

  1. Logrotate копирует файл журнала в новый файл журнала.
    • Новый файл журнала пока отображается только в старом месте.
  2. Logrotate обрезает старый файл.
    • Это превращает старый файл в нулевые байты в обоих местах.
  3. Файл журнала продолжает заполняться из приложения.

Это оставляет резервные копии файлов журналов в старом месте.

Исправить это довольно просто: настройте logrotate, чтобы ротация журналов в новый расположение. У старого все еще будет растущий файл, но это будет только один.

Метод копирования и создания:

  1. Logrotate копирует файл в новый файл журнала.
    • Этот файл журнала не имеет жесткой связи и отображается только в новом месте.
  2. Logrotate удаляет старый лог-файл.
    • Из-за жесткой ссылки это просто удаляет жесткую ссылку в каталоге, с которым работает logrotate. В другом каталоге по-прежнему будет полная копия файла.
  3. Logrotate создает новый файл журнала.
    • Это не будет жестко привязано к другому месту.

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