Ringkasan
Pesan kesalahan yang Anda lihat akan terjadi jika dua kondisi berikut terpenuhi:
- Pekerjaan cron Anda tidak selesai (kesalahan) atau butuh lebih dari 4 menit untuk menyelesaikan;
- Anda memanggil cron lebih sering daripada setiap 4 menit (Menurut pengaturan crontab Anda, bukan pengaturan di Drupal)
Pesan kesalahan ini karena itu merupakan gejala tugas cron yang gagal atau terlalu lama untuk dijalankan. (Catatan: Saya sadar Anda telah menemukan pelakunya, tetapi saya ingin menambahkan jawaban untuk orang yang menemukan halaman ini melalui pencarian, seperti yang saya lakukan)
Latar Belakang
Hal pertama yang harus dipahami adalah bagaimana tugas cron Drupal dijalankan. Cron Drupal dipanggil secara berkala - baik melalui cron job di server Anda, atau setelah setiap halaman dimuat jika Anda menggunakan cron orang miskin yang merupakan default Drupal.
Tugas cron tidak harus dijalankan setiap kali cron dipanggil - ada pengaturan di Drupal (standarnya adalah 3 jam) yang mengatakan seberapa sering tugas cron harus dijalankan. Tetapi keterlambatan 3 jam ini hanya berlaku jika tugas cron telah selesai dengan sukses.
Dalam Drupal 7, cron menggunakan mekanisme penguncian Drupal , yang menyediakan sistem kunci kerja sama, penasehat. Salah satu fitur dari sistem kunci ini adalah bahwa kunci akan kedaluwarsa setelah waktu tertentu. Dalam kasus cron, kadaluwarsa setelah 4 menit - jadi jika cron Anda dipanggil setiap 3 menit dan pekerjaan cron sebelumnya belum selesai pada saat itu (entah crash atau sangat lambat), Anda memang akan mendapatkan pesan kesalahan ini .
Fakta bahwa Anda mengatur cron menjadi setiap 12 jam tidak membuat perbedaan - karena tugas cron Drupal gagal / terlalu lama, Drupal menganggap itu belum dijalankan, jadi coba jalankan lagi segera setelah cron dipanggil. Penundaan dua belas jam hanya berlaku untuk cron run yang berhasil.
Variabel cron semaphore tidak ada lagi di Drupal 7 - ini untuk versi Drupal yang lebih lama. Di Drupal 7 tidak ada cara yang dapat diandalkan untuk melepaskan kunci secara manual, karena backend penguncian dapat berubah - namun jika Anda menggunakan mekanisme penguncian inti maka Anda dapat melepaskan kunci cron dengan mengedit database:
DELETE FROM semaphore WHERE name = 'cron';
Tetapi dengan melakukan ini Anda hanya akan memperbaiki gejalanya - masalah yang perlu diatasi adalah mengapa cron gagal / butuh waktu lama untuk dijalankan.