من الممكن لتطبيق Rails Logrotate مع Nginx Passenger دون إعادة التشغيل؟

StackOverflow https://stackoverflow.com/questions/4211493

سؤال

من الممكن القيام بـ 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 ينسخ المحتوى إلى ملف جديد بشكل أساسي وياقت الملف القديم. هذا يلغي الحاجة إلى إعادة التشغيل.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top