Почему crontab выдает ошибку "Нет такого файла или каталога", когда файл существует?

Я получаю следующие три строки в сообщении об ошибке в /var/mail/username после выполнения следующего задания в crontab...

15 * * * * /Applications/MAMP/htdocs/iconimageryidx/includes/insertPropertyRESI.php

Ошибки:

/applications/mamp/htdocs/iconimageryidx/includes/insertpropertyRESI.php: line 1: ?php: No such file or directory
/applications/mamp/htdocs/iconimageryidx/includes/insertpropertyRESI.php: line 3: syntax error near unexpected token `'initialize.php''
/applications/mamp/htdocs/iconimageryidx/includes/insertpropertyRESI.php: line 3: `require_once('initialize.php');

Скрипт PHP, который я пытаюсь выполнить, действительно существует, и я несколько раз убедился в правильности написания. Я запускал crontab на другом скрипте раньше, и он работал нормально... какие-нибудь идеи?

2-я и 3-я ошибки приведены в строке 3 следующего скрипта (тот, который я пытаюсь запустить с помощью crontab):

<?php
    require_once('initialize.php');
    require_once('insertPropertyTypes.php');

    $sDate;
    if(isset($_GET['startDate'])) {
        $sDate = $_GET['startDate'];
    } else {
        $sDate = '';
    }

    $insertResi = new InsertPropertyTypes('Listing', $sDate, 'RESI');
?>

Когда я запускаю мой скрипт insertPropertyRESI.php в браузере, он работает просто отлично???? Кроме того, initialize.php и insertPropertyTypes.php находятся в том же каталоге, что и insertPropertyRESI.php.

Я использую MAMP с PHP 5.3.5

спасибо за помощь:

3 ответа

Решение

Вы пытаетесь выполнить скрипт, у которого нет действительного шебанга.
Добавьте шебанг в качестве первой строки скрипта следующим образом (конечно, настройте путь):

#!/usr/bin/php

Или измените запись в crontab на:

15 * * * * /usr/bin/php /Applications/MAMP/htdocs/iconimageryidx/includes/insertPropertyRESI.php

Причина, по которой он запускается в вашем браузере, заключается в том, что ваш сервер настроен на автоматическую компиляцию и обслуживание файлов PHP.

Крон, с другой стороны, не имеет такой роскоши; по умолчанию он запускает все, что вы положили в него как bash скрипт.

Судя по вашему Cronjob, вы запускаете файл PHP без использования php синтаксический анализатор, и, как таковой, Cron пытается запустить скрипт как bash скрипт.

Если вы положите php -f перед расположением PHP-скрипта вы говорите Cron запустить команду, используя php части, вы должны найти, что теперь он будет работать.

Кроме того, вы можете отредактировать свой код и добавить #!/usr/bin/php к началу сценария. Когда Cron запускает этот файл, он будет использовать php запустить команду, а не bash,

Запуск php-файла в командной строке отличается от запуска его на веб-сервере, таком как apache. Чтобы запустить скрипт php в командной строке, вам необходимо:

  1. Установите пакет php-cli, так как он не может быть установлен по умолчанию.
  2. Убедитесь, что у вас есть комментарий "!#/ Usr/bin/php" в первой строке, и убедитесь, что вы установили разрешение "x" в своем php-скрипте.
  3. В качестве альтернативы 2, вы просто запускаете скрипт, вызывая его с помощью 'php your_script'
Другие вопросы по тегам