Как logrotate взаимодействует с жестко связанными файлами?
У меня есть служба, которая настаивает на хранении файлов журналов в ужасных местах. После того, как все попытки изменить то, где он их хранит, провалились, моей следующей идеей было создать жесткие ссылки на эти файлы где-нибудь более чистым. Это привело меня к проблеме:
Если я настрою logrotate для управления этими файлами журналов, будет ли он работать по назначению (вращать журналы, чтобы мои ссылки работали)? Или будет logrotate случайно разорвать ссылки, и журналы будут накапливаться в их родных местах, но не в моем центральном?
Я считаю, что могу настроить logrotate для повторного создания жестких ссылок после ротации, если это необходимо. Но нужно ли это?
3 ответа
Чтобы ответить на ваш вопрос, это зависит от того, какой тип вращения вы делаете. Например, произойдет следующая прогрессия:
Метод копирования и усечения:
- Logrotate копирует файл журнала в новый файл журнала.
- Новый лог-файл пока отображается только в старом месте.
- Logrotate усекает старый файл.
- Это превращает старый файл в ноль байтов в обоих местах.
- Лог-файл продолжает заполняться из приложения.
Это оставляет резервные копии файла журнала в старом местоположении.
Исправить это довольно просто: настройте logrotate для поворота логов в новом месте. У старого все еще будет растущий файл, но это будет только один.
Метод копирования и создания:
- Logrotate копирует файл в новый файл журнала.
- Этот файл журнала не содержит жестких ссылок и отображается только в новом месте.
- Logrotate удаляет старый лог-файл.
- Из-за жесткой ссылки, это просто удаляет жесткую ссылку в каталоге, с которым работает logrotate. В другом каталоге по-прежнему будет полная копия файла.
- Logrotate создает новый файл журнала.
- Это не будет жестко связано с другим местоположением.
Этот метод наиболее проблематичен, и вам понадобится магия после поворота, чтобы убрать после него.
Не ссылаться на файлы: ссылка на каталог. Если вы ссылаетесь на файл, у вас могут возникнуть проблемы, когда приложение создает новый файл журнала, либо как часть ротации журнала (в зависимости от того, как это делается), либо при остановке и последующем перезапуске приложения.
ln -s /path/to/where/application/creates/logs/ /var/log/application
Я думаю, что вы можете использовать символические ссылки на желаемое новое местоположение и указывать logrotate вращать журналы в любой папке, в которой они фактически находятся;ln -s /path/file /path/to/newlink