Magento предоставляет два скрипта cron в своем корневом каталоге, cron.php и cron.sh.
Какой из них лучше запустить и почему?
Было бы лучше запустить cron.sh
Начиная с Magento EE 1.13.x и CE 1.8.x, механика cron изменилась, и в Magento появилась новая функция режима планирования.
Доступно 2 режима: 1. по умолчанию - запускает запланированные кроны. 2. всегда - как следует из названия, эти задачи будут безоговорочно выполняться каждый раз, когда запускается cron и не требуют явно определенных расписаний.
Обычно cron.php, вызываемый без каких-либо параметров, использует shell_exec для выполнения двух процессов cron.sh. У каждого свой параметр («по умолчанию» или «всегда»). Cron.sh, в свою очередь, передает этот параметр обратно в cron.php, который затем выполняет cron. Внутри Magento использует свою инфраструктуру событий для обработки двух режимов, отправляя события с именами «по умолчанию» и «всегда». Затем Mage_Cron реализует два метода наблюдателя.
Взглянув на cron.php, вы заметите использование PHP-функции shell_exec. Помимо проблем безопасности, функция может возвращать NULL как при возникновении ошибки, так и при отсутствии вывода программы. С помощью этой функции невозможно обнаружить сбои выполнения. Это означает, что в любой данный момент, когда ваш скрипт / код дает сбой из-за ошибки, происходит следующее: 1. cronjob становится устаревшим, 2. ошибка не записывается, 3. и никто не знает, что все это произошло.
Чтобы преодолеть это, следует добавить следующие cronjob's:
*/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
Это гарантирует, что режимы процесса всегда будут выполняться без использования резервной PHP-функции shell_exec и что cron не должен устаревать, так как в случае возникновения ошибки возникает исключение.
www-data
будет меняться на любой пользователь запускает процессы веб-сервера. Также стоит отметить, что для многих настроек хостинга CPanel / WHMshell_exec()
будет отключено.*/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*/5 * * * * /bin/sh /path/to/magento/cron.sh cron.php -m=default