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

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

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

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

3 ответа

Решение

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

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

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

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

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

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

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

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

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

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

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

Другие вопросы по тегам