Який сценарій cron найкраще запускати? cron.php або cron.sh


27

Magento надає два сценаріїв cron у своєму кореневому каталозі, cron.php та cron.sh.

Який з них краще бігати і чому?

Відповіді:


31

Найкраще було б запустити cron.sh

Станом на Magento EE 1.13.x та CE 1.8.x, механіка кронів змінилася, коли Magento ввів нову функцію режиму планування.

Є два доступних режими: 1. за замовчуванням - запускає заплановані крони. 2. завжди - як видно з назви, ці завдання беззастережно виконуватимуться щоразу, коли запускається крон, і не потрібні чітко визначені графіки.

В основному виклик cron.php без будь-яких параметрів використовує shell_exec для виконання двох процесів cron.sh. Кожен з різними параметрами ("за замовчуванням" або "завжди"). Cron.sh, в свою чергу, повертає цей параметр назад до cron.php, який потім виконує cron. Внутрішньо Magento використовує свою інфраструктуру подій для обробки двох режимів, розсилаючи події з іменами "за замовчуванням" та "завжди". Потім Mage_Cron реалізує два методи спостерігача.

Переглядаючи cron.php, ви помітите використання функції PHP shell_exec. Крім проблеми безпеки, функція може повертати NULL і тоді, коли виникає помилка або програма не видає вихід. Неможливо виявити збої у виконанні за допомогою цієї функції. Це означає, що в будь-який момент, коли ваш скрипт / код виходить з ладу через помилку, трапляється таке: 1. Cronjob стає несвіжим, 2. Жодна помилка не зафіксована, 3. і ніхто не знає, що щось із цього не сталося.

Щоб подолати це, слід додати такі:

*/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, і що крона не повинна старіти, оскільки виняток буде викинуто, якщо сталася помилка.


Просто додамо, що виразний вираз крона вище досить загальний. 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 насправді правильний.
Шон

@AmitBera Я отримував те саме повідомлення про помилку, і не міг змусити його працювати з www-data, root або будь-яким іншим користувачем. Я фактично просто опустив користувача, і він зараз працює, тому*/5 * * * * /bin/sh /path/to/magento/cron.sh cron.php -m=default
Майкл

@Shaughn чи можете ви пояснити, що використовують режим за замовчуванням і завжди?
Рохан Хапані
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.