السجلّاتُ تنمو إلى الأبد ما لم يقتطعها شيء. والقرصُ الممتلئ يُسقط قاعدةَ البيانات وخادمَ الويب والنسخَ الاحتياطية في الوقت نفسه، وهو من أشيع أسباب الانقطاع غير المفسَّر — انظر سجلّاتٌ تملأ القرص.

قاعدةٌ لتطبيقك أنت

# /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
نبّه عند ثمانين بالمئة لا عند خمسٍ وتسعين. فبين الرقمين متّسعٌ للتصرّف؛ وبعد الخمسة والتسعين قد يسدّ سجلٌّ كبير الفجوةَ في دقائق.