Skrip cron mana yang terbaik untuk dijalankan? cron.php atau cron.sh

27

Magento menyediakan dua skrip cron di direktori root-nya, cron.php dan cron.sh.

Mana yang lebih baik untuk dijalankan dan mengapa?

Joe
sumber

Jawaban:

31

Akan lebih baik menjalankan cron.sh

Pada Magento EE 1.13.x dan CE 1.8.x, mekanika cron telah berubah di mana Magento telah memperkenalkan fungsi mode penjadwalan baru.

Ada 2 mode yang tersedia: 1. default - menjalankan crons terjadwal. 2. selalu - Seperti namanya tugas-tugas ini akan dijalankan tanpa syarat setiap kali cron dipicu dan tidak perlu jadwal yang ditentukan secara eksplisit.

Pada dasarnya cron.php dipanggil tanpa parameter menggunakan shell_exec untuk menjalankan dua proses cron.sh. Masing-masing dengan parameter yang berbeda ("default" atau "selalu"). Cron.sh pada gilirannya melewati parameter ini kembali ke cron.php yang kemudian mengeksekusi cron. Secara internal Magento menggunakan infrastruktur acara untuk memproses dua mode dengan mengirimkan acara dengan nama "default" dan "selalu". Mage_Cron kemudian mengimplementasikan dua metode pengamat.

Melihat cron.php, Anda akan melihat penggunaan fungsi PHP shell_exec. Selain sebagai masalah keamanan, fungsi ini dapat mengembalikan NULL saat terjadi kesalahan atau program tidak menghasilkan keluaran. Tidak mungkin mendeteksi kegagalan eksekusi menggunakan fungsi ini. Ini berarti bahwa pada titik tertentu ketika skrip / kode Anda gagal karena kesalahan, hal berikut terjadi: 1. Cronjob menjadi basi, 2. Tidak ada kesalahan dicatat, 3. dan tidak ada yang tahu bahwa semua ini telah terjadi.

Untuk mengatasinya, cronjob berikut harus ditambahkan:

*/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

Ini akan memastikan bahwa mode proses akan selalu berjalan tanpa menggunakan fungsi PHP fallback shell_exec dan bahwa cron seharusnya tidak menjadi basi karena pengecualian dilemparkan jika terjadi kesalahan.

Shaughn
sumber
Hanya akan menambahkan bahwa ekspresi cron sampel di atas cukup umum. www-dataakan berubah menjadi pengguna apa pun yang menjalankan proses server web. Juga perlu dicatat bahwa untuk banyak pengaturan hosting CPanel / WHM, shell_exec()akan dinonaktifkan.
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=alwaysdan perintah-perintah ini memberikan kesalahan "command not found" oleh nupur walia
Amit Bera
Jika Anda mendapatkan kesalahan itu, maka Anda perlu memeriksa 3 hal: 1) www-data adalah pengguna yang benar di server yang dapat menjalankan proses ini, jika tidak ubahlah menjadi apa pun pengguna itu. 2) periksa lokasi sh, jadi jalankan "yang sh" dan harus menampilkan lokasi, ini akan menggantikan "/ bin / sh" jika jalurnya berbeda. 3) akhirnya memeriksa bahwa path ke cron.sh sebenarnya benar.
Shaughn
@AmitBera Saya mendapatkan pesan kesalahan yang sama dan tidak bisa berfungsi dengan www-data, root atau pengguna lain. Sebenarnya saya baru saja menghapus pengguna dan sekarang berfungsi, jadi*/5 * * * * /bin/sh /path/to/magento/cron.sh cron.php -m=default
Michael
@ Samughn dapatkah Anda menjelaskan apa yang menggunakan mode default dan selalu?
Rohan Hapani