Magento 1.9.1 cron_schedule hiç seçilmedi


12

Neredeyse 3 gün geçirdim ve planlanan görevleri işlemek için Magento Cron'u anlayamadım ve yapamadım. Magento 1.9.1.0 kullanıyorum ve yakın zamanda sipariş e-postalarının anında göndermek yerine sıraya alındığını fark ettim. Gerekliliği anlıyorum ama sistemi kuyrukları seçmesini sağlayamıyorum.

İşte Cronjob için benim görüşüm. resim açıklamasını buraya girin

İşte benim cronjob komut satırı. resim açıklamasını buraya girin

Görevler cron_schedule tablosunda nasıl oluşturulur. resim açıklamasını buraya girin

Kayıtlar cron_schedule tablosunda oluşturulduğundan, Cron'un her 5 dakikada bir çalıştığını düşünüyorum. Bu kayıtları PhpMyAdmin ile el ile silersem, kayıtlar bir süre sonra otomatik olarak oluşturulur.

Ancak görevlerin durumu 'beklemede' kalır ve asla tamamlanmaz. Yapılandırmamda yanlış bir şey olup olmadığından emin değilim veya bir şey eksik. Birisi lütfen planlanan görevin zamanında nasıl çalıştırılacağını bana yardım edebilir mi? Ayrıca neden bir iş kodu için birden fazla kayıt oluşturulur?

Güncelleme

Tüm masayı temizledim ve cron planlanan işleri yarattı. Tüm işler beklemede durumda ve asla 60 dakikadan fazla beklemeden çalışmıyorlar. Magento 1.9.1'de bir sorun var

Güncelleme 11/02: Bugün süreç hakkında biraz daha analiz yaptım.

Cron.php dosyasını aşağıdaki gibi düzenledim

echo 'iam before mdefault 1';
shell_exec("/bin/sh $baseDir/cron.sh $fileName -mdefault 1 > /dev/null 2>&1 &");
echo 'iam before malways 1';
shell_exec("/bin/sh $baseDir/cron.sh $fileName -malways 1 > /dev/null 2>&1 &");
echo 'i returned success';

Mage_Cron_Model_Observer sınıfını aşağıdaki gibi düzenledim

public function dispatch($observer) {
  echo 'iam inside dispath';

Benim anlayış cron -mdefault çalıştırdığında gönderme işlevini çağırmak ve yürütme gerçekleşecekti. Ama olan şey cron çıktısında aşağıdaki gibiydi.

Content-type: text/html

iam before mdefault 1iam before malways 1i returned success

Bu, gönderimin atall çağrılmadığı anlamına gelir ...

Başka bir deneme

Değişkeni el ile değiştirdim $isShellDisabled = true;ve cron.php içinde aşağıdakileri değiştirdim.

if ($isShellDisabled) {
  echo 'before always';
  Mage::dispatchEvent('always');
  echo 'after always';
  Mage::dispatchEvent('default');
  echo 'after default';
} else {
  Mage::dispatchEvent($cronMode);
}

Yukarıdakiler için cron çıkışı aşağıdaki gibidir

Content-type: text/html

before alwaysiam inside dispath alwaysafter always

Şimdi 'dispatchAlways' adını veriyor ancak 'dispatch' değil

Cevapların hiçbiri bana yardımcı olmuyor. Asla zamanlanan görevleri seçmez. Yani Cron ilk kez çalıştığında tablodaki görevleri başarıyla oluşturdu. Ama asla görevi yerine getirmez.


Bir web tarayıcısından cron.php'yi çalıştırdığınızda ne olur? Boş bir sayfa olacak, ama demek istediğim cron görevlerinize ne olacak?
seanbreeden

Bash betiğini kullanmayı deneyin: */5 * * * * /bin/sh PATH_TO_PRODUCTION/cron.shvarsa.
Phil Birnie

@seanbreeden, tarayıcıda URL ile çalıştırdığımda boş bir sayfa gösteriyor. Görevlere hiçbir şey olmadı .. Soruyu, oluşturulan yeni görevlerle güncelledim ...
Malaiselvan

@PhilB, .sh hiçbir fark yaratmıyor. Bekleyen görevler sonsuza kadar beklemek benzer ama eminim cron her 5 dakikada bir çalışıyor.
Malaiselvan

cron_schedulemasayı boşaltmaya çalıştın mı? Bir saat kadar sonra yeni görevlerle dolu olup olmadığını kontrol edin
Sander Mangel

Yanıtlar:


3

Cron Jobs'un PHP versiyonuydu.

PHP sürümü site için doğru ayarlanmış, bu yüzden çalışıyordu; Ancak Cron Jobs sunucu yerel PHP 5.3 çalışıyordu, bu yüzden sadece Cron çalıştırırken hataları alıyordu. Sürüm 5.5'e güncelledim.

Cron komutu değiştirildi:

php /home/mydomainname/public_html/cron.php
to
php55 /home/mydomainname/public_html/cron.php

veya sunucuda:

/opt/php55/bin/php /home/mydomainname/public_html/cron.php

cron.php içinde

$isShellDisabled = (stripos(PHP_OS, 'win') === false) ? $isShellDisabled : true;

Bu satırdan sonra şunu ekleyin:

$isShellDisabled = true;

Belirli bir PHP sürümünde (benim durumumda ea-php70) cron.php çalıştırma php -vsözü , çalıştığım sorunları düzeltti: terminalin hangi PHP sürümünü kullandığını görmek için terminalde çalıştırın. Benim durumumda 5.6 idi. Bu yüzden içine değiştirerek PHP 7.0 kullanımını zorlamak phpzorunda ea-php70kaldı crontab -e. Teşekkürler!
Daan van den Bergh

2

cron_schedulemasayı boşaltmaya çalıştın mı? Bir saat kadar sonra yeni görevlerle dolu olup olmadığını kontrol edin.

Ayrıca belirli cronjobs'u devre dışı bırakmak için Aoe_Scheduler'ı kullanabilirsiniz . Belirli bir kişinin diğer tüm görevleri durduran bir hataya neden olup olmayacağına bakın.

Magento cronjobs'un bir komut dosyasında önemli bir hata ayarlama biçimi, tüm görevlerin yürütülmesinin başarısız olmasına neden olur


Cevap için teşekkürler. Önemli hata herhangi bir kayıtta yakalanıyor mu? Davamla ilgili birkaç bulgu daha güncelledim ve sorumun aynısını güncelledim.
Malaiselvan

@seanbreeden: Bugün, Cron.php'yi web tarayıcısıyla başlattığımda, programları seçerek harika çalıştığını fark ettim. Bu, komut dosyalarının hiçbirinde ölümcül bir hata olmadığını kanıtlar. Cron'un neden crontab üzerinden çalışmadığına dair bir fikrin var mı?
Malaiselvan

2

İlk adım olarak ayarlarınızı Magento'nun varsayılan cron ayarlarına geri döndürmenizi öneririm:

Magento Cron Varsayılanları

Mevcut ayarlarınızla ilgili bir sorun var: programınız her 15 dakikada bir oluşturulur, ancak yalnızca 5 dakika önceden planlanır ve bu da 10 dakikalık bir boşluk bırakır.


Teşekkürler. Varsayılana sıfırladıktan sonra bile çalışmıyor. İlk kez çalıştırıldığında, cron_schedule tablosundaki tüm işleri planlanan zamanla oluşturdu. İşler asla alınmaz ve sonsuza kadar beklemede kalır. Ayarladıktan sonra fark ettiğim bir şey var $isShellDisabled = true;ve Cron.php'yi tarayıcı aracılığıyla başlattığımda işler seçiliyor ancak CronTab aracılığıyla değil.
Malaiselvan

Bu sorun henüz çözülmedi. Hosting sağlayıcımla ilgili bir sorun olacak mı? Komut dosyasının düzenli aralıklarla tetiklendiğini görüyorum, ancak yalnızca işler seçilmiyor. 1.8'den taşındığımdan beri de sorun olacak mı?
Malaiselvan

Cronjob'ınızda yeterli bellek var mı? İçinde yardımcı olabilecek bir şey olup olmadığını görmek için hata günlüklerini deneyin.
Kristof at Fooman

bu sorun henüz çözülmedi ... Her gün başımı kırıyorum. Hata günlükleri? bunları nerede görebilirim?
Malaiselvan

@Malaiselvan hata günlükleri için, konum ve sunucunun hata günlüğüne nasıl erişileceğini bilmeleri için lütfen sistem yöneticinize veya web barındırıcınıza danışın. Ayrıca cron işini komut satırından elle çalıştırmak da yararlı olabilir - her ikisini de deneyin php -f cron.phpve ./cron.shdaha fazla araştırma yapmak için bir şey üretip üretmediklerini görün.
Kristof, Fooman'da

1

Benim için de aynı sorun.

"Çok geç ..." hatası bulundu.

cron_scheduleTabloyu temizledikten sonra , cron.sh çalışmayı durdurdu (artık programlamıyor).

Sadece tüm eski Cron süreçlerini öldürdükten sonra çalıştı.


Benim durumumda Cron ilk kez çalıştığında tablodaki görevleri başarıyla oluşturdu. Ama asla görevi yerine getirmez. :-(
Malaiselvan

1

Ben de aynı problemi yaşadım. Benim sorunum saat dilimine özgüdür: tablodaki created_atve scheduled_atsütunları cron_scheduleUTC + 0 olmalıdır, girişlerim UTC + 2 idi.

Bunu doğrulamak için tarihleri created_atve scheduled_atdün arasındaki tarihleri ​​ayarlayabilir ve bir sonraki cron programına kadar bekleyebilirsiniz.

Umarım birine yardım eder!


1

Bluehost'ta, cron.sh değişikliğinde

 PHP_BIN=`which php`

için

 PHP_BIN="php54s"

Varsayılan olarak paylaşılan barındırmada PHP 5.2 çalışır.

Ayrıca cron.php, iki $isShellDisabledsatırı değiştirerek değiştirmek zorunda kaldım$isShellDisabled = true;

PHP uyarılarından kurtulmak için bu satırları daha önce de ekledim

$_SERVER['SCRIPT_NAME'] = 

if (empty($_SERVER['SCRIPT_FILENAME'])) $_SERVER['SCRIPT_FILENAME'] = '~/public_html/cron.php';
if (empty($_SERVER['SCRIPT_NAME'])) $_SERVER['SCRIPT_NAME'] = '/cron.php';
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.