สคริปต์ cron ตัวไหนดีที่สุดที่จะเรียกใช้ cron.php หรือ cron.sh


27

Magento มีสองสคริปต์ cron ในไดเรกทอรีรากของมัน cron.php และ cron.sh

อันไหนดีกว่ากันและทำไม

คำตอบ:


31

มันจะเป็นการดีที่สุดที่จะเรียกใช้ cron.sh

ตั้งแต่ Magento EE 1.13.x และ CE 1.8.x กลไก cron ได้เปลี่ยนไปโดยที่ Magento ได้เปิดตัวฟังก์ชั่นโหมดตั้งเวลาใหม่

มี 2 ​​โหมดให้เลือก: 1. ค่าเริ่มต้น - เรียกใช้ crons ที่ตั้งเวลาไว้ 2. เสมอ - ตามชื่อที่บอกว่างานเหล่านี้จะถูกดำเนินการอย่างไม่มีเงื่อนไขทุกครั้งที่มีการเรียก cron และไม่ต้องการกำหนดการที่กำหนดไว้อย่างชัดเจน

โดยทั่วไป cron.php ถูกเรียกโดยไม่มีพารามิเตอร์ใด ๆ ใช้ shell_exec เพื่อดำเนินการสองกระบวนการของ cron.sh แต่ละรายการมีพารามิเตอร์ที่แตกต่างกัน (“ ค่าเริ่มต้น” หรือ“ เสมอ”) Cron.sh จะส่งผ่านพารามิเตอร์นี้กลับไปที่ cron.php ซึ่งจะเรียกใช้งาน cron ภายในวีโอไอพีใช้โครงสร้างพื้นฐานเหตุการณ์เพื่อประมวลผลสองโหมดโดยการส่งเหตุการณ์ที่มีชื่อ "ค่าเริ่มต้น" และ "เสมอ" Mage_Cron ใช้สองวิธีผู้สังเกตการณ์

ดูที่ cron.php คุณจะสังเกตเห็นการใช้งานฟังก์ชั่น PHP shell_exec นอกเหนือจากความกังวลด้านความปลอดภัยแล้วฟังก์ชันยังสามารถส่งคืนค่า NULL ได้ทั้งเมื่อเกิดข้อผิดพลาดหรือโปรแกรมไม่สร้างเอาต์พุต ไม่สามารถตรวจพบความล้มเหลวในการดำเนินการโดยใช้ฟังก์ชั่นนี้ ซึ่งหมายความว่า ณ จุดใดก็ตามเมื่อสคริปต์ / รหัสของคุณล้มเหลวเนื่องจากข้อผิดพลาดเกิดขึ้นต่อไปนี้: 1. cronjob กลายเป็นเก่า 2. ไม่มีการบันทึกข้อผิดพลาด 3. และไม่มีใครรู้ว่าสิ่งนี้เกิดขึ้น

เพื่อเอาชนะสิ่งนี้ควรเพิ่ม cronjob ต่อไปนี้:

*/5 *   * * *   www-data /bin/sh /path/to/magento/cron.sh cron.php -m=default
*/5 *   * * *   www-data /bin/sh /path/to/magento/cron.sh cron.php -m=always

สิ่งนี้จะช่วยให้มั่นใจได้ว่าโหมดกระบวนการจะทำงานตลอดเวลาโดยไม่ต้องใช้ฟังก์ชัน fallback PHP shell_exec และ cron ไม่ควรค้างเนื่องจากข้อผิดพลาดเกิดขึ้นหากข้อผิดพลาดเกิดขึ้น


เพียงแค่เพิ่มว่าการแสดงออก cron ตัวอย่างข้างต้นเป็นเรื่องธรรมดา www-dataจะเปลี่ยนเป็นสิ่งที่ผู้ใช้เรียกใช้กระบวนการเซิร์ฟเวอร์เว็บ นอกจากนี้ยังมีข้อสังเกตว่าสำหรับการตั้งค่าโฮสต์ CPanel / WHM จำนวนมากshell_exec()จะถูกปิดการใช้งาน
pspahn

*/5 * * * * www-data /bin/sh /path/to/magento/cron.sh cron.php -m=default */5 * * * * www-data /bin/sh /path/to/magento/cron.sh cron.php -m=alwaysและคำสั่งเหล่านี้ให้ข้อผิดพลาด "ไม่พบคำสั่ง" โดย nupur walia
Amit Bera

หากคุณได้รับข้อผิดพลาดนั้นคุณต้องตรวจสอบ 3 สิ่ง: 1) www-data เป็นผู้ใช้ที่ถูกต้องบนเซิร์ฟเวอร์นั้นที่สามารถเรียกใช้กระบวนการนี้มิฉะนั้นให้เปลี่ยนเป็นสิ่งที่ผู้ใช้เป็น 2) ตรวจสอบตำแหน่งของ sh ดังนั้นเรียกใช้ "ซึ่ง sh" และควรส่งออกตำแหน่งซึ่งจะแทนที่ "/ bin / sh" หากเส้นทางอื่น 3) ในที่สุดตรวจสอบว่าเส้นทางไปยัง cron.sh นั้นถูกต้องจริง
Shaughn

@AmitBera ฉันได้รับข้อความแสดงข้อผิดพลาดเดียวกันและไม่สามารถทำงานกับ www-data, root หรือผู้ใช้อื่น ๆ ที่จริงฉันเพิ่งตัดผู้ใช้ออกและตอนนี้ใช้งานได้แล้ว*/5 * * * * /bin/sh /path/to/magento/cron.sh cron.php -m=default
ไมเคิล

@Shaughn คุณสามารถอธิบายได้ว่าการใช้ค่าเริ่มต้นและโหมดเสมอคืออะไร
Rohan Hapani
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.