Magento 2, arka plan görevlerine oldukça bağımlıdır. Yeniden indeksleme, bülten gönderme, oturumları temizleme, sipariş kuyruklarını işleme — tüm bunlar cron üzerinden çalışır. Cron yapılandırması yanlış veya gereksiz şekilde karmaşıksa, açıklanamayan yavaşlamalar, takılı kalan siparişler ve büyüyen veritabanı tabloları görürsünüz. En kötüsü: bir şeyler bozulana kadar fark edilmez. Bu rehber, mevcut cron sağlığını denetleme, yaygın yanlış yapılandırmaları düzeltme ve arka plan görevlerinin ön uç trafiğiyle çakışmasını önleme adımlarını içeriyor.
Neden Cron Performansı Sandığınızdan Daha Önemli?
Yoğun bir Magento mağazasında, her birkaç dakikada düzinelerce cron görevi çalışır. Her biri veritabanı bağlantıları açar, Magento framework'ünü yükler ve genellikle katalog fiyatı yeniden hesaplama veya müşteri segmenti güncellemeleri gibi maliyetli işlemler gerçekleştirir. Bu görevler yığılmaya başladığında — önceki çalışma tamamlanmadığında veya çok agresif şekilde planlandığında — şunlarla karşılaşırsınız:
Aynı anda çalışan çoklu cron işlemleri Veritabanı kilitlenmesi nedeniyle ön uç sorgularının yavaşlaması Cron'un web istekleriyle yarışması sonucu PHP-FPM işçi kaynaklarının tükenmesi cron_schedule tablosunun milyonlarca satıra ulaşması
Sağlıklı bir cron yapılandırması, görevleri öngörülebilir bir şekilde çalıştırır, kendi kendini temizler ve tek bir takılı görevle kuyruğu bloke etmez.
Adım 1: Mevcut Cron Sağlığını Kontrol Edin
Öncelikle kuyruktaki durumlara doğrudan bakın:
php bin/magento cron:status
Daha detaylı bir resim için veritabanını doğrudan sorgulayın:
SELECT job_code, status, COUNT(*) as count FROM cron_schedule WHERE scheduled_at > NOW() - INTERVAL 1 HOUR GROUP BY job_code, status ORDER BY count DESC;
Şunlara dikkat edin:
Beklenen çalışma süresinden daha uzun süre "running" durumunda kalan görevler Aynı job kodu için düzinelerce bekleyen giriş (yığılma) Sürekli "missed" durumunda olan görevler
Sağlıklı bir çıktıda çoğunlukla başarılı sonuçlar görülür ve gelecek çalışmalar için birkaç bekleyen giriş bulunur.
Adım 2: Cron'un Gerçekten Çalıştığından Emin Olun
Bu bariz görünse de, Magento kurulumlarında yanlış yapılandırılmış sistem crontab'ları en yaygın sorunlardan biridir. Crontab'ınızı kontrol edin:
crontab -l
Şuna benzer bir şey görmelisiniz:
- /usr/bin/php /var/www/html/bin/magento cron:run 2>&1 | grep -v "Ran jobs by schedule"
- /usr/bin/php /var/www/html/bin/magento cron:run --group="index"
Hiçbir şey görmüyorsanız veya tüm grupları birlikte çalıştıran tek bir giriş varsa, bu bir sorundur. Magento 2'nin varsayılan, index ve consumers gibi birden fazla cron grubu vardır ve bunların bağımsız olarak çalıştırılması faydalıdır. Index grubu uzun sürebilen yeniden indeksleme görevlerini içerir. Eğer varsayılan grup ile aynı işlemde çalışırlarsa, sipariş işleme ve e-posta gönderme gibi zaman kritik görevleri bloke ederler.
Adım 3: Cron Gruplarını Ayırın
Doğru yapılandırma, her ana grubu kendi programında çalıştırır:
Varsayılan grup — her dakika
- /usr/bin/php /var/www/html/bin/magento cron:run --group="default" >> /var/log/magento-cron-default.log 2>&1
Index grubu — genellikle her 5 dakikada bir yeterlidir
/5 * /usr/bin/php /var/www/html/bin/magento cron:run --group="index" >> /var/log/magento-cron-index.log 2>&1
Consumers grubu — yalnızca mesaj kuyrukları kullanılıyorsa gerekir
- /usr/bin/php /var/www/html/bin/magento cron:run --group="consumers" >> /var/log/magento-cron-consumers.log 2>&1
Grupları ayırmak, her kategori için bağımsız kontrol imkanı verir. Siparişle ilgili cron'ları etkilemeden indekslemeyi yavaşlatabilir ve bunun tersi de mümkündür.
Adım 4: cron_schedule Tablosunu Temizleyin
Varsayılan olarak Magento, cron geçmişini sonsuza kadar saklar. Bir yıldan uzun süredir çalışan bir mağazada, bu tablo kolayca milyonlarca satıra ulaşabilir ve her cron çalışması, büyük bir tabloya sorgulama ve ekleme yaparken yavaşlar.
Mevcut tablo boyutunu kontrol edin:
SELECT COUNT(*) FROM cron_schedule;
Eğer ~50.000 satırın üzerindeyse, sorun var demektir. Temizleyin:
php bin/magento cron:install --force
Ardından otomatik temizlemeyi app/etc/config.php dosyasında veya Yönetici Paneli → Mağaza Yapılandırması → Gelişmiş → Sistem → Cron (Planlı Görevler) altında yapılandırın:
<config> <default> <system> <cron> <default> <history_cleanup> <enabled>1</enabled> <lifetime>168</lifetime> <!-- 7 gün --> </history_cleanup>
Yapay zeka özeti
Learn how to audit, split, and clean Magento 2 cron jobs to prevent database bloat and frontend slowdowns. Boost store speed with these proven tuning tips.