Почему 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 в командной строке, вам необходимо:
- Установите пакет php-cli, так как он не может быть установлен по умолчанию.
- Убедитесь, что у вас есть комментарий "!#/ Usr/bin/php" в первой строке, и убедитесь, что вы установили разрешение "x" в своем php-скрипте.
- В качестве альтернативы 2, вы просто запускаете скрипт, вызывая его с помощью 'php your_script'