(Надеюсь, у меня есть подходящий сайт SE для этого вопроса, извиняюсь, если нет.)
У меня есть приложение Ruby-on-Rails, которое развертывается с использованием Apache + mod_rails (пассажир). Он использует MySQL в качестве базы данных. я использую SyslogLogger
отправить журнал RoR в системный журнал и использовать logrotate
через ежедневное задание cron для ротации журналов.
Я обнаружил, что приложение RoR зависает, если оно находится в середине чего-то при ротации журналов. Я пробовал поставить copytruncate
в logrotate
конфигурации, но похоже, что это также влияет на apache
журналы (возможно, потому, что журналы ошибок RoR идут в error.log
файл из apache
) и - возможно - также журналы MySQL (возможно - иногда трудно точно определить, какой журнал вызывает сбой).
Поиск в Интернете дает несколько разных решений для ротации журналов, одно из них - использовать copytruncate
ключ, другой - использовать cronolog
, но я еще не нашел ни одной, которая напрямую решала бы проблему, которую я вижу.
Так есть ли известное решение для этого? Каков «правильный способ» ротации журналов в приложении RoR (с использованием apache и mod_rails для развертывания)? Я должен просто поставить copytruncate
в каждый файл конфигурации logrotate, который имеет какое-то отношение к приложению?
Вместо copytruncate у меня работали эти строки в файле logrotate для моего приложения rails:
postrotate
touch /your-rails-directory/tmp/restart.txt
endscript
Я бы не стал отправлять журналы вашего приложения Rails в syslog. Вы пробовали конфигурацию logrotate, когда позволяли Rails записывать собственные файлы журналов?