Получение ошибки задания cron из-за тега ‹?php

Я настроил задание cron для запуска. Он выполняет файл php с именем cronj.php, но он не работает, и я получаю уведомление о задании cron:

/root/website/myworld/blabla/cronj.php: line 1: ?php: No such file or directory

И строка 1 в этом файле - это просто тег php <?php я не знаю, как


person Ilja    schedule 24.12.2011    source источник
comment
Покажите нам запись в вашем crontab.   -  person Maerlyn    schedule 25.12.2011
comment
возможный дубликат shebang #! не работает в ubuntu linux при создании в Windows 7   -  person mario    schedule 25.12.2011


Ответы (4)


Cron выполняет файл, как если бы это был сценарий оболочки. Обычно вы помещаете строку shebang (например, #!/usr/bin/env php) в начало файла, чтобы оболочка знала, как ее вызывать, но PHP это не нравится, поскольку он выводит все, что находится за пределами его тегов. Таким образом, вместо этого:

0     3     *     *     *         /mypath/myscript.php ...

попробуй это:

0     3     *     *     *         /usr/bin/env php /mypath/myscript.php ...

или используйте трюк @Ravenex.

ИЗМЕНИТЬ Меня правильно упрекнули за то, что PHP ведет себя последовательно. Судя по всему, shebang действительно работает в PHP. Мои извинения @chess007.

person Amadan    schedule 24.12.2011
comment
Хм, действительно, вы правы. Я тестировал CLI со стандартным вводом и по глупости полагал, что он будет вести себя так же, как и с аргументом имени файла. - person Amadan; 25.12.2011
comment
так что мой путь не будет выглядеть так?: /usr/bin/env php /root/website/myworld/blabla/cronj.php - person Ilja; 25.12.2011
comment
Это выглядит правильно. Или, как мне сказали, вы можете оставить свою запись cron как есть и поместить #!/usr/bin/env php в качестве первой строки в свой PHP-скрипт. - person Amadan; 25.12.2011
comment
Хорошо, я сейчас протестирую оба решения. - person Ilja; 25.12.2011

Мы используем cron для запуска ночных задач в игре php facebook. Мы делаем это с помощью curl следующим образом:

/usr/bin/curl http://www.ourdomain.com/page.php

Если я правильно помню, у нас были некоторые проблемы с использованием локального хоста, чтобы попытаться избежать внешнего поиска. Также мы пробовали использовать выполнение из командной строки php, что в основном работало, но вызывало несколько странных ошибок.

person Ravenex    schedule 24.12.2011
comment
Мы также обнаружили, что это упрощает отладку, поскольку помещает скрипт в место, где его можно протестировать из браузера, а отладочная информация может быть выведена в удобочитаемом виде. Хотя с этим решением будьте осторожны, подумайте о безопасности, чтобы сторонние пользователи не могли наткнуться и запустить скрипт. - person Ravenex; 25.12.2011

Попробуйте позвонить по веб-адресу (http://.....).

Очевидно, он не анализирует его как PHP-скрипт.

Редактировать: пожалуйста, покажите, как вы использовали cronjob, чтобы убедиться, что моя догадка была верна.

person Derk Arts    schedule 24.12.2011

Используйте это, чтобы настроить свой cron, а также указать адрес электронной почты в настройках cron Cpanel, чтобы вы получали электронное письмо при успешном запуске cron.

wget -O - http://ВАШСАЙТ/cron.php

person Gyan    schedule 16.10.2015