Cron durdu; günlükleri şöyle diyor: “Cron zaten çalışıyorken yeniden çalıştırılmaya çalışılıyor.”


11

Başlığa göre bu sorunu gidermek ve gidermek için adımlar nelerdir?

Manuel olarak çalıştırmayı denediğimde hemen bir sayfa alıyorum ve "Zaten çalışırken cron'u yeniden çalıştırmaya çalışıyorum" hata mesajını alıyorum.


Db cronunda neye baktığımı kafamın üstünden hatırlayamıyordum, ancak "zaten çalışırken cron'u yeniden çalıştırmayı denemek" in hızlı bir google beni digitaledgesw.com/node/21 adresine yönlendirdi , D7
Jimajamma

Bu çok garip. Bu ileti, değişkenin denetiminden hemen sonra (drupal_cron_run'daki lock_acquire aracılığıyla) çekirdek kodunda tam olarak bir kez bulunur. Gerçekten farklı olduğunu gösteren daha fazla bilgi / belirti gönderirseniz, yeniden açacağım.
mpdonadio

Öneri: taze bir Drupal kurmaya çalışabilir ve her 3 dakikada bir çalıştırmak için cron'u ayarlayabilir ve aynı etkiye sahip olup olmadığınızı görebilirsiniz!
Aboodred1

Sadece koş:drush sqlq "DELETE FROM semaphore WHERE name = 'cron';"
kenorb

4
GELECEKTEN OKUYUCULAR: Şu anda kabul edilen cevap, sorunun olduğu Drupal versiyonu olan Drupal 7 için doğru değildir. Drupal 6 için geçerlidir, ancak Drupal 7 kodu değişti; sadece Drupal 7'nin Drupal 6'dan temizlenmemiş kalıntıları var.
kiamlaluno

Yanıtlar:


12

Cron semaforu muhtemelen kilitli. Kodunuzdaki herhangi bir yerden drupal_cron_cleanup () yöntemini çağırmayı deneyebilirsiniz (bu, cron tarafından çağrılmaz) ve cron semafor değişkeninizin kilidini açmalıdır .

Drupal 6'da yapılandırılmış drush'ınızı da deneyebilirsiniz:

$ drush vdel -y cron_semaphore

3
Veya drush yerine db erişiminiz varsa değişkenler tablosundan manuel olarak silin.
Malks

8
Bu değerlerin tabloda önbelleğe alındığını unutmayın cache_bootstrap.
tostinni

1
lütfen tablonun tam adı nedir çünkü değişkenler tablosunda herhangi bir cron_semaphore bulamadım
mohammed amine bourkadi

2
Yukarıdaki drush komutunu çalıştırdığımda "cron_semaphore bulunamadı." Herhangi bir fikir?
Nigel Waters

1
@NigelWaters Cron semaforu, Drupal 7'de bir kilit haline geldi, ancak drupal_cron_cleanup()güncellenmemiş gibi görünüyor.
kiamlaluno

19

ö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.


Bu mesajı alıyorum, ama cron_debug çalıştırdığımda tüm cron işleri başarıyla sona erer ve hızlı bir şekilde çalışır (~ 5 saniye sürer çekirdek güncellemeleri hariç). Bu sorunun kaynağı yavaş veya başarısız cron rutinleri ise, neden cron_debug onları vurgulamıyor?
doub1ejack

1
Cron_debug modülünün nasıl çalıştığını bilmiyorum, bu yüzden gerçekten bu konuda yorum yapamam. 'Cron_safe_threshold' değişkeninin değeri nedir? 'Semafor' tablosu hangi verilerdir?
Alice Heaton

1
Bu ayrıntılı açıklama için Drupal 7. +1 için doğru cevaptır.
kiamlaluno

BTW, cron sizin için başarısız olursa, hangi modülü kapattığını görmek için Cron Hata Ayıklama modüllerini kullanın - Arama modülünün 10'undan 9 katı. Arama modülünü kapatmayı deneyin, ardından cron'u manuel olarak çalıştırın ve ne olduğunu görün. İndekslemeye
Dan Mantyla

4

cron_semaphoreDeğişken Drupal 6 mevcut, ama semafor kilitler denilen ayrı bir tabloya taşındı böylece, Drupal 7 kullanıyorsanız semaphore.

Yani cron semaforunun kilidini açmak için çözüm:

Drupal 7

drush sqlq "TRUNCATE semaphore"

Drupal 6

drush -y vdel cron_semaphore 

3
Drupal 7 için "Daha az aşırı" varyant:drush sql-query "DELETE FROM semaphore WHERE name='cron'"
tanius

2

Cron Hata Ayıklama modülünü kullanarak cron hatalarını ayıklayabilirsiniz .

Cron Debug, cron süreçlerini bulmanıza yardımcı olacaktır.

  • programlama veya çalışma zamanı hataları nedeniyle başarısız
  • zaman aşımı (PHP, sunucu, veritabanı)
  • çok yavaş

Cron Hata Ayıklama ayrıca başkalarını çalıştırmadan belirli cron işlevlerini test etmenize izin verir. Bu, kendi işlevinizi her test ettiğinizde tüm bakım, uyarılar ve diğer görevlerle tam bir cron.php çalıştırmak istemediğiniz cron işlevlerini geliştirmek için iyi olabilir.


1
Bu modül benim için hayat kurtarıcıydı!
Dan Mantyla

Evet, bu modül iyi, cron işinde hata ayıklamaya yardımcı oluyor.
Nishant

1

Cron sorununu şu şekilde çözdüm:

  1. PhpMyAdmin aracılığıyla, semafor tablosuna baktım ve burada satır sildim name = cron
  2. Komut satırı üzerinden "drush cron" komutunu çalıştırdım
  3. Sorun hakkında bir ipucu veren bir hata mesajı gördüm; bu sizin için farklı olabilir, ancak benim için yüklü bir modülle bir PHP kütüphanesini paylaşan yakın zamanda kaldırılmış bir modül bir hataya neden oluyordu

0

Drupal 8 için: drush sqlq "Semafordan SİL NEREDE name = 'cron';"


0

Drupal 7'de, başka bir seçenek olarak,

Via drush cronalıyordum,

WD cron: Attempting to re-run cron while it is already running.       [warning]
Cron run failed.                                                      [error]

Bu geliştirme ortamındaydı ve önceki bir cron çalıştığı ve kesintiye uğradığı için oldu.

Açık includes/common.inc, etrafında hattı 5413 veya en, bu bloğu bulursunuz, https://cgit.drupalcode.org/drupal/tree/includes/common.inc?h=7.x#n5413

  // Try to acquire cron lock.
  if (!lock_acquire('cron', 240.0)) {
    // Cron is still running normally.
    watchdog('cron', 'Attempting to re-run cron while it is already running.', array(), WATCHDOG_WARNING);
  }

Değiştir ifbir ile && FALSE,

  // Try to acquire cron lock.
  if (!lock_acquire('cron', 240.0) && FALSE) {
    // Cron is still running normally.
    watchdog('cron', 'Attempting to re-run cron while it is already running.', array(), WATCHDOG_WARNING);
  }

Ve cron'u tekrar çalıştır. Bu onun çalışmasına izin verecektir.

Lütfen bunu dağıtmayın ve bittikten sonra geri alın. Ayrıca hata ayıklamaya da yardımcı olur.


-1

Birkaç kez buna karşı geldim. Drupal 6'da drush kullanmıyorsanız bunu şu şekilde düzeltebilirsiniz:

1 cron_% değişkenlerini değişkenler tablosundan kaldırın.

SELECT * FROM variable WHERE name like "cron%";

DELETE FROM variable WHERE name like "cron%";

2 net Drupal önbellek: / admin / settings / performance

sayfanın altındaki 'önbelleğe alınmış verileri temizle' düğmesine basarak.

3 run cron yönetici panelinden / admin / raporlar / status / run-cron comand satırından çalıştırmaz çünkü bu sorunlara neden olabilir.

4 Bir sonraki otomatik cron çalışmasının normal şekilde tamamlandığını kontrol edin.


Drupal Cevaplarına Hoşgeldiniz! Soru Drupal 7 ile ilgilidir. Bu veritabanı tablosundan satırların silinmesinin fazla bir etkisi olmaz.
kiamlaluno

Ah, sadece OP'de Drupal 7 için olduğunu söylemediği için yanıtı ekledim. Bu, drupal 6 için iyi çalışır ve normal 'semaforu sil' cevaplarından daha eksiksizdir. kimse burada d6 sona erdi, yararlı olacağını düşündüm. Bu yanlış mıydı? Bunun için işaretlenmiş gibiyim.
munkiepus

cron komut satırından kaldırmak için sadece güncellendi, sadece sorunlara neden olduğunu
öğrendim

-1

Xdebug kullanarak hata ayıklayabilirsiniz, yönetici arayüzünden cron'u çalıştırın Yönetici> Yapılandırma> sistem> cron.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.