السجلّاتُ تنمو إلى الأبد ما لم يقتطعها شيء. والقرصُ الممتلئ يُسقط قاعدةَ البيانات وخادمَ الويب والنسخَ الاحتياطية في الوقت نفسه، وهو من أشيع أسباب الانقطاع غير المفسَّر — انظر سجلّاتٌ تملأ القرص.
قاعدةٌ لتطبيقك أنت
# /etc/logrotate.d/site
/var/www/site/storage/logs/*.log {
daily
rotate 14
size 100M
compress
delaycompress
missingok
notifempty
create 0640 www-data www-data
sharedscripts
postrotate
systemctl reload php8.3-fpm > /dev/null 2>&1 || true
endscript
}
الرايةُ التي تقرّر أينجح
عمليّةٌ تُبقي ملفَّ سجلٍّ مفتوحًا تظلّ تكتب في الملفّ المُدوَّر. فيمتلئ القرص كما كان تمامًا بينما يبقى السجلُّ الحالي فارغًا ويبدو كلُّ شيءٍ بخير. فإمّا أن تُعيد تحميل الخدمة في postrotate كما فوق، وإمّا أن تستعمل copytruncate.
copytruncate # copy the file, then empty the original in place
# simpler, and loses the few lines written during the copy
اختبِره دون أن تنتظر يومًا
sudo logrotate -d /etc/logrotate.d/site # dry run, prints what it would do
sudo logrotate -f /etc/logrotate.d/site # force it now
ls -la /var/www/site/storage/logs/
واليوميّةُ تُدوَّر على حدة
journalctl --disk-usage
sudo journalctl --vacuum-size=500M
فـsystemd يحفظ سجلّاته الخاصّة تحت حدوده الخاصّة — انظر قراءةُ يوميّة النظام.
وراقب القرص
df -h
sudo du -xh /var/log /var/www --max-depth=2 2>/dev/null | sort -h | tail -15
نبّه عند ثمانين بالمئة لا عند خمسٍ وتسعين. فبين الرقمين متّسعٌ للتصرّف؛ وبعد الخمسة والتسعين قد يسدّ سجلٌّ كبير الفجوةَ في دقائق.