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.
İşte benim cronjob komut satırı.
Görevler cron_schedule tablosunda nasıl oluşturulur.
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.
*/5 * * * * /bin/sh PATH_TO_PRODUCTION/cron.sh
varsa.
cron_schedule
masayı boşaltmaya çalıştın mı? Bir saat kadar sonra yeni görevlerle dolu olup olmadığını kontrol edin