من الممكن لتطبيق Rails Logrotate مع Nginx Passenger دون إعادة التشغيل؟
-
25-09-2019 - |
سؤال
من الممكن القيام بـ logrotate دون إعادة تشغيل nginx (فقط أرسل إشارة USR1 إلى nginx ، سيفعل المهمة). أتساءل أنه من الممكن لتطبيق Rails الخاص بي (Nginx Passenger). لا يستحق إعادة تشغيل تطبيقات Rails الخاصة بي لمجرد القيام بـ Logrotate.
المحلول
إذا كنت تتحدث عن دوران سجل تطبيق Rails ، فيمكنك القيام بذلك عن طريق وضع
config.logger = Logger.new(config.log_path, 10, 1024**2)
في ملف البيئة الخاص بك. الوسيطة الثانية هي عدد ملفات .log التي ترغب في الاحتفاظ بها ، والثالث هو الحجم في البايتات التي يُسمح للملفات بالوصول إليها قبل تدويرها. هذا التكوين يعني 10 ملفات من 1 ميغابايت. قد لا تكون قابلة للتكوين تمامًا مثل Logrotate ربما (لا يوجد دعم للضغط وما إلى ذلك) ، ولكنه يتيح لك الاحتفاظ بجميع ملفات السجل الخاصة بك داخل التطبيق الخاص بك. هذا عادة ما يعمل بالنسبة لي.
ايضا وجدت هذا إذا كنت ترغب في التمسك بتناوب السجل عبر nginx.
نصائح أخرى
تكوين Logrotate بسيط جدًا لخفض هذا
/path/to/rails_apps/*/shared/log/*.log {
daily
missingok
rotate 30
compress
delaycompress
copytruncate
}
ال copytruncate
ينسخ المحتوى إلى ملف جديد بشكل أساسي وياقت الملف القديم. هذا يلغي الحاجة إلى إعادة التشغيل.