В настоящее время мы обновляем Ubuntu 12.04 LTS до 14.04 LTS на нашем ruby на серверах приложений rails и заметили, что файлы журнала больше не вращаются.
На обеих машинах у нас есть файл /var/app-name/config/logrotate
принадлежит нашему пользователю Unix deployer
который содержит действительный файл logrotate следующим образом:
/var/app-name/log/*.log {
daily
rotate 365
delaycompress
compress
dateext
dateformat -%Y%m%d
missingok
copytruncate
}
Это затем вставлено в /etc/logrotate.d/
каталог как app-name
На нашем сервере Ubuntu 12.04 у нас есть logrotate 3.7.8, который отлично работает. Это входит в var/app-name/log/
каталог и вращает все файлы журнала
Но на сервере Ubuntu 14.04 у нас есть logrotate 3.8.7, который не вращает файлы журнала для нашего приложения.
Когда я отлаживаю это через sudo logrotate -d -f /etc/logrotate/.conf
Я получаю следующий вывод:
Ignoring /etc/logrotate.d/app-name because the file owner is wrong (should be root).
Вслед за этим в коде кажется, что это изменение было добавлено в поток релиза 3.8.x: https://github.com/demands/logrotate/commit/b8ce386a969c60e5c8ee78023c24a1ba0aab1526
Если я изменю владельца файла, ссылка на который /var/app-name/config/logrotate
в root
затем он начинает работать снова. Но, учитывая, что этот файл является частью моего приложения и создан с помощью среды развертывания capistrano, которую мы используем в этом состоянии, я бы предпочел не менять владельца, если он работал нормально.
Итак, рекомендуются / поддерживаются ли файлы символьных ссылок в logrotate?
И если это так, если это отказ от использования моего файла (принадлежит deployer
) который является символом в /etc/logrotate.d
каталог, будет рассматриваться как ошибка?
Или есть другой рекомендуемый подход для ротации журнала для конкретного приложения?
(также спросил на Unix StackExchange )
источник
Ответы:
Проблема в том, что файл конфигурации logrotate может работать любой команда от имени пользователя root (используя разделы prerotate / postrotate). Таким образом, вы бы эффективно
deployer
привилегии пользователя root, предоставляя ему доступ на запись к файлам в/etc/logrotate.d/
, Так что нет, это не ошибка.Если вы доверяете своему пользователю-установщику, то, я думаю, вы могли бы решить эту проблему, предоставив ему права sudo для копирования файлов в
/etc/logrotate.d/
, Разумеется, если предположить, что пользователь, выполняющий развертывание, не тот же пользователь, с которым работает веб-приложение.источник
Я понимаю, что немного опаздываю на вечеринку, но у меня была похожая проблема, и я решил поделиться своим решением.
Мои проблемы начались, когда
logrotate
не будет читать конфигурацию, которую я написал. Я не хотел развертывать новые конфигурации в папке, принадлежащей пользователю root, потому что я не хотел, чтобы у пользователя развертывания был доступ к root что-нибудь ,Сначала я попытался запустить
logrotate
как пользователь развертывания, но он пожаловался на доступ к файлу состояния в/var/lib/logrotate/state
, Затем я прочитал справочную страницу. Вы можете указать файл состояния, которыйlogrotate
использует! Таким образом, мне показалось лучшим решением настроить ежедневный cron для выполненияlogrotate
как пользователь развертывания с пользовательским файлом состояния. Таким образом, пользователю или приложению не требуется root-доступ.Вот как вы указываете файл состояния:
Теперь вы можете запустить logrotate как любой пользователь и владелец конфигурации, который вам нравится!
источник