Magento 1.9.1 cron_schedule tidak dipilih selamanya


12

Saya menghabiskan hampir 3 hari dan tidak dapat memahami dan membuat Magento Cron untuk memproses tugas yang dijadwalkan. Saya menjalankan Magento 1.9.1.0 dan baru-baru ini memperhatikan bahwa email pesanan sekarang diantrikan alih-alih dikirim secara instan. Saya mengerti keharusan tapi tidak bisa membuat sistem untuk memilih antrian.

Inilah yang saya lihat untuk Cronjob. masukkan deskripsi gambar di sini

Ini adalah baris perintah cronjob saya. masukkan deskripsi gambar di sini

Ini adalah bagaimana tugas-tugas dibuat di tabel cron_schedule. masukkan deskripsi gambar di sini

Karena catatan dibuat di tabel cron_schedule saya pikir Cron berjalan setiap 5 menit sekali. Jika saya secara manual menghapus catatan ini melalui PhpMyAdmin catatan dibuat secara otomatis setelah beberapa waktu.

Tetapi status tugas tetap 'tertunda' dan tidak pernah selesai. Tidak yakin apakah ada sesuatu yang salah dalam konfigurasi saya atau saya kehilangan sesuatu. Dapatkah seseorang tolong bantu saya bagaimana membuat tugas yang dijadwalkan berjalan tepat waktu. Juga mengapa banyak catatan dibuat untuk satu kode pekerjaan?

Memperbarui

Saya membersihkan seluruh meja dan cron menciptakan pekerjaan yang dijadwalkan. Semua pekerjaan dalam status tertunda dan tidak pernah berjalan bahkan menunggu lebih dari 60 menit. Ada yang salah di Magento 1.9.1

Pembaruan 11/02: Hari ini saya melakukan beberapa analisis pada prosesnya.

Saya mengedit cron.php seperti di bawah ini

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';

Saya mengedit kelas Mage_Cron_Model_Observer seperti di bawah ini

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

Pemahaman saya adalah ketika cron menjalankan -mdefault itu harus memanggil fungsi pengiriman dan eksekusi akan terjadi. Tetapi apa yang terjadi adalah seperti di bawah dalam cron output.

Content-type: text/html

iam before mdefault 1iam before malways 1i returned success

Ini berarti pengiriman itu tidak disebut ...

Satu sama lain mencoba

Saya secara manual mengubah variabel $isShellDisabled = true;dan saya mengubah di bawah ini di cron.php.

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

Output cron untuk di atas adalah seperti di bawah ini

Content-type: text/html

before alwaysiam inside dispath alwaysafter always

Sekarang ia memanggil 'dispatchAlways' tetapi bukan 'dispatch'

Tidak ada jawaban yang membantu saya. Tidak pernah memilih tugas yang dijadwalkan. Yaitu ketika Cron berjalan untuk pertama kalinya berhasil membuat tugas dalam tabel. Tapi itu tidak pernah menjalankan tugas.


Apa yang terjadi ketika Anda menjalankan cron.php dari browser web? Itu akan menjadi halaman kosong, tapi maksud saya apa yang terjadi pada tugas cron Anda?
seanbreeden

Coba gunakan skrip bash: */5 * * * * /bin/sh PATH_TO_PRODUCTION/cron.shjika tersedia.
Phil Birnie

@ seanbreeden, ketika saya menjalankan melalui URL di browser itu menunjukkan halaman kosong. Tidak ada yang terjadi pada tugas-tugas .. Saya memperbarui pertanyaan dengan set tugas baru yang dibuat ...
Malaiselvan

@ PhBil, .sh tidak ada bedanya. Ini mirip dengan tugas yang tertunda yang tertunda selama-lamanya, tetapi saya yakin cron berjalan setiap 5 menit.
Malaiselvan

Apakah Anda mencoba mengosongkan cron_schedulemeja? Periksa apakah sudah diisi dengan tugas-tugas baru setelah satu jam atau lebih
Sander Mangel

Jawaban:


3

Itu adalah versi PHP dari Cron Jobs.

Versi PHP diatur dengan benar untuk situs yang karenanya berfungsi; Namun Cron Jobs berjalan di server asli PHP 5.3 yang mengapa saya mendapatkan kesalahan hanya ketika menjalankan Cron. Saya memperbarui ke versi 5.5.

Perintah Cron yang diubah:

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

atau di hostgator:

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

di cron.php

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

Setelah baris ini, tambahkan:

$isShellDisabled = true;

Penyebutan menjalankan cron.php dalam versi PHP tertentu (ea-php70 dalam kasus saya) memperbaiki masalah yang saya hadapi: jalankan php -vdi terminal untuk melihat versi PHP yang digunakan terminal. Dalam kasus saya itu 5,6. Jadi saya harus memaksa penggunaan PHP 7.0 dengan mengubah phpke ea-php70dalam crontab -e. Terima kasih!
Daan van den Bergh

2

Apakah Anda mencoba mengosongkan cron_schedulemeja? Periksa apakah sudah terisi dengan tugas-tugas baru setelah satu jam atau lebih.

Anda juga dapat menggunakan Aoe_Scheduler untuk menonaktifkan cronjobs tertentu. Lihat apakah ada orang tertentu yang dapat menyebabkan kesalahan yang menghentikan semua tugas lainnya.

Cara Magento cronjobs mengatur kesalahan fatal dalam skrip akan menyebabkan eksekusi semua tugas gagal


Terima kasih atas jawabannya. Apakah kesalahan fatal dicatat dalam log apa pun? Saya memperbarui beberapa temuan pada kasus saya dan memperbarui hal yang sama dalam pertanyaan saya.
Malaiselvan

@seanbreeden: Hari ini saya perhatikan bahwa ketika saya meluncurkan Cron.php melalui browser web, itu bekerja dengan baik dengan memilih jadwal. Ini membuktikan tidak ada kesalahan fatal pada skrip apa pun. Tahu mengapa cron tidak berjalan melalui crontab?
Malaiselvan

2

Sebagai langkah pertama saya sarankan mengembalikan pengaturan Anda kembali ke pengaturan cron default Magento:

Cron Magento Defaults

Ada masalah dengan pengaturan Anda saat ini: jadwal Anda dihasilkan setiap 15 menit tetapi hanya dijadwalkan sebelumnya selama 5 menit yang menyisakan jarak 10 menit.


Terima kasih. Bahkan setelah saya reset ke default tidak berfungsi. Ketika pertama kali dijalankan, ia menciptakan semua pekerjaan di tabel cron_schedule dengan waktu yang dijadwalkan. Pekerjaan tidak pernah diambil dan tetap di meja sebagai tertunda selamanya. Satu hal yang saya perhatikan setelah pengaturan $isShellDisabled = true;dan ketika saya meluncurkan Cron.php melalui browser, pekerjaan akan diambil tetapi tidak melalui CronTab.
Malaiselvan

Masalah ini belum terpecahkan. Apakah akan ada masalah dengan penyedia hosting saya. Saya melihat skrip dipicu secara berkala tetapi hanya pekerjaan yang tidak dipilih. Apakah ini akan menjadi masalah karena saya bermigrasi dari 1.8?
Malaiselvan

Apakah cronjob Anda memiliki cukup memori? Coba log kesalahan untuk melihat apakah ada sesuatu di sana yang bisa membantu.
Kristof di Fooman

masalah ini belum terpecahkan ... Setiap hari saya mematahkan kepala. Log kesalahan? dimana saya bisa melihatnya?
Malaiselvan

@Malaiselvan untuk log kesalahan, silakan periksa dengan admin sistem atau hosting Anda karena mereka harus tahu lokasi dan cara mengakses log kesalahan server. Juga mungkin membantu menjalankan pekerjaan cron secara manual dari baris perintah - cobalah keduanya php -f cron.phpdan ./cron.shuntuk melihat apakah mereka menghasilkan sesuatu untuk diselidiki lebih lanjut.
Kristof di Fooman

1

Masalah yang sama bagi saya.

"Terlambat ..." kesalahan ditemukan.

Setelah membersihkan cron_schedulemeja, cron.sh berhenti bekerja (tidak menjadwalkan lagi).

Hanya bekerja setelah membunuh semua proses Cron lama.


Dalam kasus saya ketika Cron berjalan untuk pertama kalinya berhasil membuat tugas dalam tabel. Tapi itu tidak pernah menjalankan tugas. :-(
Malaiselvan

1

Saya memiliki masalah yang sama. Masalah saya adalah khusus zona waktu: kolom created_atdan scheduled_atdalam cron_scheduletabel harus UTC + 0, entri saya UTC + 2.

Untuk memverifikasi ini, Anda cukup mengatur tanggal dari created_atdan scheduled_atke kemarin dan menunggu hingga jadwal cron berikutnya.

Semoga itu bisa membantu seseorang!


1

Di Bluehost, dalam perubahan cron.sh

 PHP_BIN=`which php`

untuk

 PHP_BIN="php54s"

Secara default di shared hosting itu menjalankan PHP 5.2.

Saya juga harus berubah cron.php, mengganti dua $isShellDisabledbaris dengan $isShellDisabled = true;

Untuk menghilangkan peringatan PHP, saya juga menambahkan baris ini sebelumnya

$_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';
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.