Какой скрипт 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. по умолчанию - запускает запланированные кроны. 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 не должен устаревать, так как в случае возникновения ошибки возникает исключение.

Shaughn
источник
Просто добавлю, что приведенное выше примерное выражение 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
Амит Бера
Если вы получаете эту ошибку, вам нужно проверить 3 вещи: 1) www-data - это правильный пользователь на этом сервере, который может запустить этот процесс, иначе измените его на тот, кто является пользователем. 2) проверьте местоположение sh, поэтому запустите «which sh», и он должен вывести местоположение, это заменит «/ bin / sh», если это другой путь. 3) наконец, проверьте, что путь к cron.sh действительно правильный.
Шон
@AmitBera Я получаю то же сообщение об ошибке и не могу заставить его работать с www-данными, root или любым другим пользователем. Я фактически просто опустил пользователя, и теперь он работает, так что*/5 * * * * /bin/sh /path/to/magento/cron.sh cron.php -m=default
Майкл
@Shaughn Вы можете объяснить, что такое использование режима по умолчанию и всегда?
Рохан Хапани