Apa langkah-langkah untuk memecahkan masalah dan menyelesaikan masalah ini sesuai judul?
Ketika saya mencoba untuk menjalankan secara manual, saya mendapatkan halaman segera, dan pesan kesalahan "Mencoba untuk menjalankan kembali cron ketika sedang berjalan."
drush sqlq "DELETE FROM semaphore WHERE name = 'cron';"
Jawaban:
Cron semaphore mungkin terkunci. Anda dapat mencoba memanggil drupal_cron_cleanup () dari mana saja dalam kode Anda (itu tidak akan dipanggil oleh cron) dan itu akan membuka kunci variabel semaphore cron Anda.
Jika Anda telah mengkonfigurasi drush di Drupal 6, Anda juga dapat mencoba:
sumber
cache_bootstrap
.drupal_cron_cleanup()
tampaknya tidak diperbarui.Ringkasan
Pesan kesalahan yang Anda lihat akan terjadi jika dua kondisi berikut terpenuhi:
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:
Tetapi dengan melakukan ini Anda hanya akan memperbaiki gejalanya - masalah yang perlu diatasi adalah mengapa cron gagal / butuh waktu lama untuk dijalankan.
sumber
The
cron_semaphore
variabel lakukan ada pada Drupal 6, tapi Anda menggunakan Drupal 7, sehingga kunci semaphore pindah ke meja terpisah yang disebutsemaphore
.Jadi solusi untuk membuka kunci cron semaphore adalah:
Drupal 7
Drupal 6
sumber
drush sql-query "DELETE FROM semaphore WHERE name='cron'"
Anda dapat men-debug cron dengan menggunakan modul Cron Debug .
sumber
Inilah cara saya memecahkan masalah cron:
name = cron
sumber
Untuk Drupal 8: drush sqlq "DELETE FROM semaphore WHERE name = 'cron';"
sumber
Pada Drupal 7, bahkan sebagai opsi lain,
Melalui
drush cron
saya mendapatkan,Ini pada lingkungan pengembangan dan terjadi karena cron sebelumnya berjalan dan terganggu.
Pada
includes/common.inc
, pada baris 5413, atau sekitar, Anda akan menemukan blok ini, https://cgit.drupalcode.org/drupal/tree/includes/common.inc?h=7.x#n5413Ubah
if
dengan&& FALSE
,Dan jalankan kembali cron. Itu akan memungkinkannya berjalan.
Tolong jangan menyebarkan ini dan mengembalikannya kembali setelah selesai. Ini juga membantu dengan debugging.
sumber
Saya telah menghadapi ini beberapa kali. Di Drupal 6 Jika Anda tidak menggunakan drush, Anda dapat memperbaikinya seperti ini:
1 Hapus variabel cron_% dari tabel variabel.
2 kosongkan cache Drupal di: / admin / setting / performance
dengan menekan tombol 'hapus data cache' di bagian bawah halaman.
3 jalankan cron dari panel admin / admin / laporan / status / run-cron jangan jalankan dari baris perintah karena ini dapat menyebabkan masalah.
4 Periksa apakah menjalankan cron otomatis berikutnya selesai seperti biasa.
sumber
Anda dapat men-debug dengan menggunakan xdebug, menjalankan cron dari antarmuka admin Admin> Configuration> system> cron.
sumber