Magento cron.php выдает ошибку при вызове через Cron или php

Недавно я разместил свой сайт в Magento, после настройки моего cron.php я получил следующий вывод:

/home/xxx/webapps/abc/cron.php: line 1: ?php
: No such file or directory
/home/xxx/webapps/abc/cron.php: line 2: /**
: No such file or directory
/home/xxx/webapps/abc/cron.php: line 3: bin: command not found
/home/xxx/webapps/abc/cron.php: line 4: $'*\r': command not found
/home/xxx/webapps/abc/cron.php: line 5: bin: command not found
/home/xxx/webapps/abc/cron.php: line 6: $'*\r': command not found
/home/xxx/webapps/abc/cron.php: line 7: syntax error near unexpected token `('
/home/xxx/webapps/abc/cron.php: line 7: ` * This source file is subject to the Open Software License (OSL 3.0)

'

Я размещаю это в Webfaction, и кажется, что эта ошибка происходит только в Webfaction. Мой другой веб-сайт (использующий ту же версию Magento), который размещен на другом сервисе, работает нормально.

Даже после того, как я удалил следующие строки в cron.php, он все равно не работает:

/**
 * Magento
 *
 * NOTICE OF LICENSE
 *
 * This source file is subject to the Open Software License (OSL 3.0)
 * that is bundled with this package in the file LICENSE.txt.
 * It is also available through the world-wide-web at this URL:
 * http://opensource.org/licenses/osl-3.0.php
 * If you did not receive a copy of the license and are unable to
 * obtain it through the world-wide-web, please send an email
 * to license@magento.com so we can send you a copy immediately.
 *
 * DISCLAIMER
 *
 * Do not edit or add to this file if you wish to upgrade Magento to newer
 * versions in the future. If you wish to customize Magento for your
 * needs please refer to http://www.magento.com for more information.
 *
 * @category    Mage
 * @package     Mage
 * @copyright  Copyright (c) 2006-2016 X.commerce, Inc. and affiliates (http://www.magento.com)
 * @license    http://opensource.org/licenses/osl-3.0.php  Open Software License (OSL 3.0)
 */

Я также пытался поставить "Шебанг" как раз перед

#!/usr/local/bin/php

И получить этот результат:

/usr/local/bin/php^M: bad interpreter: No such file or directory

Я подозреваю, что может быть что-то не так с кодировкой. Кто-нибудь может мне с этим помочь?

1 ответ

Вероятно, не столько кодирование, сколько переводы строк.

Различные операционные системы используют различные комбинации символов возврата каретки и перевода строки в ASCII. Windows использует возврат каретки + перевод строки (коды ASCII 0x0D+0x) в качестве разделителя строк. Linux/Unix использует только перевод строки (код ASCII 0x0A).

Когда ты видишь ^M, обычно он говорит вам, что в тексте есть непечатаемый символ (если только у вас нет букв Caret + M, что было бы необычно). Вы можете увидеть карту управляющих символов и их "обозначение каретки" здесь (первая таблица после якоря, столбец [b]): https://en.wikipedia.org/wiki/ASCII

Учитывая, что ^M - это символ возврата каретки, который не используется в Linux и используется до перевода строки в Windows, я сначала подумал, что ваш файл редактируется в Windows, а затем отправляется на сервер Linux. Linux не может интерпретировать строку shebang с окончанием строки Windows CRLF, что объясняет проблему shebang.

Тем не менее, PHP разработан для обработки CRLF в их интерпретаторе, поэтому я сомневаюсь, что это первая проблема. Вы не описали, как именно выполняется файл, поэтому я предполагаю, что вы следуете этим инструкциям. Если мое предположение верно, то вы используете три строки cron, описанные здесь: http://devdocs.magento.com/guides/v2.0/config-guide/cli/config-cli-subcommands-cron.html. В этом случае я бы предположил, что используется неправильная версия PHP. Я думаю о WebFaction, версия PHP по умолчанию, если вы используете /usr/local/php это 5.2 и Magento 2.1 требует PHP 5.6. Это может быть ваша проблема, но без более подробной информации трудно определить.

Другие вопросы по тегам