Название в значительной степени подводит итог. Есть ли разница между файлом оболочки и файлом php для cron Magento?
Если есть разница, есть ли причина для запуска одного вместо другого?
magento-1.9
cron
Крис Моррис
источник
источник
Ответы:
Файл cron.sh указывает на файл cron.php, поэтому вы должны указывать задачу cronjob на файл .sh.
По сути, внутри файла PHP находится вся логика для cron для получения заданий из Magento, а файл sh вызывает файл PHP.
источник
cron.sh
Файл создан , чтобы проверить , что это не процесс хрон работает в Magento , прежде чем начать новый. Всегда используйте его как триггер. При определенных схемах безопасности с WHM / cPanel вам может быть запрещено запускать сценарии оболочки в качестве заданий cron, и только после этого вы можете напрямую запускатьсяcron.php
из crontab.shell_exec
отключили в WHM / cPanel, но это не означает, что он сообщается как отключенный приcron.php
проверкахini_get('disable_functions')
. Таким образом, cron пытается запустить, видитshell_exec
как не отключенный, пытается использовать его и терпит неудачу, потому что он отключен.Вы должны использовать
cron.sh
, т.е.В зависимости от вашей среды,
cron.sh
работает,cron.php
работает,cron.sh
работаетcron.php
. Он разработан для того, чтобы cron Magento не выполнял задания несколько раз или порождал слишком много перекрывающихся процессов.При первом запуске
cron.sh
проверит текущие запущенные процессы, чтобы увидеть,cron.php
запущен ли уже (без каких-либо аргументов). Если нет, он выполнитПри
cron.php
первом запуске (и в зависимости от того, поддерживает ли ваша ОС / хост) это будет происходитьcron.sh
снова , дважды, но на этот раз с передачей аргументов:Вернувшись во
cron.sh
второй раз, он снова проверит, работает ли cron с указанными параметрами. Если нет, он вернет егоcron.php
либо с помощью либо,default
либоalways
.И в
cron.php
последний раз, это заставит Magento запускатьdefault
задания cron (почти все), а такжеalways
задания cron (напримерenterprise_refresh_index
). Разделяя их на два процесса, он снижает риск длительной работы от блокировки других.источник
cron.sh
Используйте
/bin/sh
для обработки этого скриптаУстановите константу
CRONSCRIPT
с файлом для вызова. $ 1 является первым аргументом, какcron.sh /whatever/path/cron.php
установить другую константу, здесь вы можете передать
always
илиdefault
явно.У cron нет переменных окружения, поэтому вы не можете просто вызвать
php
.which
говорит вам, где живет бинарный файл php, скорее всего в/bin/php
$0
это сам файл, как__FILE__
в phpНе уверен, как именно это работает, но что он делает: звоните
cron.php
сphp
.cron.php
Как уже было сказано, у cron нет рабочего каталога или какой-либо другой переменной окружения, поэтому рабочий каталог установлен.
Если вы вызываете cron.php по curl или как-то, имена файлов являются фиксированными?
Установите umask, который определяет, с какими разрешениями создаются новые файлы - нулевые разрешения, никому не разрешено ничего делать.
Убедитесь, что разрешены все функции, которые необходимы.
устанавливать
$cronmode
если cronmode не установлен, мы вызываем
cron.sh
оба режимаИ тогда Мадженто наконец делает свою работу:
загрузить наблюдателей событий и добавить их в пул наблюдателей
Если
shell_exec
отключено, отправляйте события, поэтому\Aoe_Scheduler_Model_Observer::dispatchAlways
и\Mage_Cron_Model_Observer::dispatch
выполняете задачи cron.источник