özet
Aşağıdaki iki koşul yerine getirilirse, gördüğünüz hata iletisi olur:
- Cron işleriniz bitmiyor (hata) veya bitmesi 4 dakikadan fazla sürüyor;
- Cron'u her 4 dakikada bir daha sık çağırıyorsunuz (Crontab ayarınıza göre, Drupal'daki ayara göre değil)
Bu nedenle bu hata iletisi, başarısız olan veya çalıştırılması çok uzun süren bir cron görevlerinin belirtisidir. (Not: Suçluyu bulduğunuzu anlıyorum, ancak bu sayfayı aramalar yoluyla bulan insanlar için bir cevap eklemek istedim, tıpkı benim yaptığım gibi)
Arka fon
Anlaşılması gereken ilk şey Drupal cron görevlerinin nasıl yürütüldüğü. Drupal cron düzenli aralıklarla çağrılır - ya sunucunuzdaki bir cron işi aracılığıyla ya da Drupal'ın varsayılanı olan fakir adamın cronunu kullanırsanız her sayfa yükünden sonra.
Bununla birlikte, cron her çağrıldığında cron görevleri mutlaka çalıştırılmaz - Drupal'da cron görevlerinin ne sıklıkta çalıştırılması gerektiğini belirten bir ayar vardır (varsayılan 3 saattir). Ancak bu 3 saatlik gecikme yalnızca cron görevleri başarıyla tamamlandıysa geçerlidir.
Drupal 7'de cron, Drupal'ın kooperatif ve danışma kilit sistemi sağlayan kilitleme mekanizmalarını kullanıyor . Bu kilit sisteminin özelliklerinden biri kilitlerin süresinin belirli bir süre sonra dolmasıdır. Cron durumunda, 4 dakika sonra sona erer - bu nedenle cron'unuz her 3 dakikada bir çağrılırsa ve önceki cron işi o zamana kadar bitmemiş olsaydı (ya çöktü ya da çok yavaştı), gerçekten bu hata mesajını alırdınız .
Cron'u her 12 saatte bir ayarlamanız bir fark yaratmaz - Drupal cron görevi başarısız olduğu / çok uzun sürdüğü için Drupal, çalıştırılmadığını varsayar, bu yüzden cron çağrılır çağrılmaz tekrar çalıştırmayı dener. On iki saatlik gecikme yalnızca başarılı cron çalışmaları için geçerlidir.
Cron semafor değişkeni Drupal 7'de artık mevcut değil - bu Drupal'ın eski bir sürümü içindi. Drupal 7'de bir kilidi manuel olarak serbest bırakmanın güvenilir bir yolu yoktur, çünkü kilitleme arka ucu değişebilir - ancak çekirdek kilitleme mekanizmasını kullanıyorsanız, veritabanını düzenleyerek cron kilitlerini serbest bırakabilirsiniz:
DELETE FROM semaphore WHERE name = 'cron';
Ancak bunu yaparak sadece semptomları düzeltirsiniz - ele alınması gereken sorun, cronun neden başarısız olması / uzun sürmesi.