Judulnya cukup meringkasnya. Apakah ada perbedaan antara file shell dan file php untuk cron Magento?
Jika ada perbedaan, adakah alasan untuk menjalankan salah satunya?
magento-1.9
cron
Chris Morris
sumber
sumber
Jawaban:
Cron.sh menunjuk ke file cron.php, jadi Anda harus mengarahkan tugas cronjob Anda ke file .sh.
Pada dasarnya di dalam file PHP tersimpan semua logika untuk cron untuk mengambil pekerjaan dari Magento dan file sh memanggil file PHP.
sumber
cron.sh
file dibentuk untuk memeriksa bahwa tidak ada proses cron berjalan di Magento sebelum memulai yang baru. Selalu gunakan itu sebagai pemicunya. Di bawah skema keamanan tertentu dengan WHM / cPanel, Anda mungkin tidak diizinkan menjalankan skrip shell sebagai tugas cron dan hanya dengan demikian Anda langsung menjalankannyacron.php
dari crontab.shell_exec
menonaktifkan di WHM / cPanel, tetapi itu tidak berarti dilaporkan sebagai dinonaktifkan saatcron.php
memeriksaini_get('disable_functions')
. Jadi cron mencoba untuk menjalankan, dilihatshell_exec
sebagai tidak dinonaktifkan, mencoba untuk menggunakannya dan gagal karena dinonaktifkan. mengangkat bahuAnda harus menggunakan
cron.sh
, yaituBergantung pada lingkungan Anda,
cron.sh
menjalankancron.php
yang menjalankancron.sh
yang berjalancron.php
. Ini dirancang untuk mencegah cron Magento dari mengeksekusi pekerjaan beberapa kali, atau menelurkan terlalu banyak proses yang tumpang tindih.Pertama kali dijalankan,
cron.sh
akan memeriksa proses yang sedang berjalan untuk melihat apakahcron.php
sudah berjalan (tanpa argumen). Jika tidak, itu akan dieksekusiSaat
cron.php
pertama kali dijalankan (dan tergantung apakah OS / host Anda mendukungnya), ia akan memunculkancron.sh
lagi , dua kali, tetapi kali ini meneruskan argumen:Kembali
cron.sh
untuk kedua kalinya, itu akan memeriksa lagi untuk melihat apakah cron berjalan dengan params yang ditentukan. Jika tidak, itu akan mengembalikannya kecron.php
salah satudefault
ataualways
.Dan
cron.php
untuk yang terakhir kalinya, itu akan memicu Magento untuk menjalankandefault
pekerjaan cron (hampir semuanya), sertaalways
pekerjaan cron (sepertienterprise_refresh_index
). Dengan memisahkan mereka menjadi dua proses, hal ini mengurangi risiko pekerjaan yang berjalan lama dari memblokir orang lain.sumber
cron.sh
Gunakan
/bin/sh
untuk memproses skrip iniTetapkan sebuah konstanta
CRONSCRIPT
dengan file yang akan dipanggil. $ 1 adalah argumen pertamacron.sh /whatever/path/cron.php
atur konstanta lain, di sini Anda dapat lulus
always
ataudefault
secara eksplisit.cron tidak memiliki variabel lingkungan, oleh karena itu Anda tidak dapat menelepon begitu saja
php
.which
memberitahu Anda, di mana php binary tinggal, kemungkinan besar di/bin/php
$0
adalah file itu sendiri, seperti__FILE__
di phpTidak yakin persis bagaimana ini bekerja, tetapi apa fungsinya: panggilan
cron.php
denganphp
.cron.php
Seperti yang sudah dikatakan, cron tidak memiliki direktori kerja atau variabel lingkungan lainnya, oleh karena itu direktori kerja ditetapkan.
Jika Anda memanggil cron.php dengan ikal atau sesuatu, nama filenya sudah diperbaiki?
Tetapkan umask, yang mendefinisikan dengan izin apa file baru dibuat - nol izin, tidak ada yang diizinkan untuk melakukan apa pun.
Pastikan, semua fungsi diizinkan yang dibutuhkan.
set
$cronmode
jika cronmode tidak disetel, kami memanggil
cron.sh
dengan kedua modeDan kemudian magento akhirnya melakukan tugasnya:
memuat pengamat acara dan menambahkannya ke kolam pengamat
jika
shell_exec
dinonaktifkan, kirim acara, jadi\Aoe_Scheduler_Model_Observer::dispatchAlways
dan\Mage_Cron_Model_Observer::dispatch
sedang menjalankan tugas cron.sumber