ฉันใช้เวลาเกือบ 3 วันและไม่สามารถเข้าใจและทำให้ Magento Cron ดำเนินงานตามกำหนดเวลาได้ ฉันใช้ Magento 1.9.1.0 และเมื่อไม่นานมานี้พบว่าอีเมลคำสั่งซื้อถูกจัดคิวแทนที่จะส่งทันที ฉันเข้าใจความจำเป็น แต่ไม่สามารถทำให้ระบบเลือกคิวได้
นี่คือสิ่งที่ฉันเห็นสำหรับ Cronjob
นี่คือบรรทัดคำสั่ง cronjob ของฉัน
นี่คือวิธีการสร้างงานในตาราง cron_schedule
เนื่องจากบันทึกถูกสร้างขึ้นในตาราง cron_schedule ฉันคิดว่า Cron กำลังทำงานหนึ่งครั้งในทุก ๆ 5 นาที ถ้าฉันลบระเบียนเหล่านี้ด้วยตนเองผ่านทาง PhpMyAdmin ระเบียนจะถูกสร้างขึ้นโดยอัตโนมัติหลังจากเวลาผ่านไปสักครู่
แต่สถานะของงานยังคง 'รอดำเนินการ' และไม่เสร็จสมบูรณ์ ไม่แน่ใจว่ามีอะไรผิดปกติในการกำหนดค่าของฉันหรือฉันหายไปอะไร ใครช่วยได้โปรดช่วยฉันทำอย่างไรให้งานที่กำหนดเวลาทำงานตรงเวลา ทำไมจึงสร้างหลายระเบียนสำหรับรหัสงานหนึ่งรหัส
ปรับปรุง
ฉันล้างตารางทั้งหมดและ cron สร้างงานที่กำหนดเวลาไว้ งานทั้งหมดอยู่ในสถานะรอดำเนินการและไม่เคยทำงานแม้แต่จะรอนานกว่า 60 นาที มีบางอย่างผิดปกติใน Magento 1.9.1
อัปเดต 11/02: วันนี้ฉันทำการวิเคราะห์เพิ่มเติมเกี่ยวกับกระบวนการ
ฉันแก้ไข cron.php ดังนี้
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 ดังนี้
public function dispatch($observer) {
echo 'iam inside dispath';
ความเข้าใจของฉันคือเมื่อ cron รัน -mdefault มันควรจะเรียกฟังก์ชั่นการจัดส่งและรันจะเกิดขึ้น แต่สิ่งที่เกิดขึ้นคือด้านล่างในเอาต์พุต cron
Content-type: text/html
iam before mdefault 1iam before malways 1i returned success
มันหมายถึงการจัดส่งไม่ได้เรียกว่า atall ...
ลองอีกวิธีหนึ่ง
ฉันเปลี่ยนตัวแปรด้วยตนเอง$isShellDisabled = true;
และฉันเปลี่ยนด้านล่างเป็น cron.php
if ($isShellDisabled) {
echo 'before always';
Mage::dispatchEvent('always');
echo 'after always';
Mage::dispatchEvent('default');
echo 'after default';
} else {
Mage::dispatchEvent($cronMode);
}
เอาต์พุต cron สำหรับด้านบนมีดังนี้
Content-type: text/html
before alwaysiam inside dispath alwaysafter always
ตอนนี้มันเรียกว่า 'dispatchAlways' แต่ไม่ใช่ 'dispatch'
ไม่มีคำตอบที่ช่วยฉันได้ มันไม่เคยเลือกงานที่กำหนด คือเมื่อ Cron รันเป็นครั้งแรกมันจะสร้างงานในตารางได้สำเร็จ แต่มันไม่เคยดำเนินงาน
*/5 * * * * /bin/sh PATH_TO_PRODUCTION/cron.sh
ถ้ามี
cron_schedule
ตารางหรือไม่? ตรวจสอบว่ามันเต็มไปด้วยงานใหม่หลังจากผ่านไปหนึ่งชั่วโมงหรือไม่