Почему crontab не выполняет мой PHP-скрипт?

Я создал один файл php для проверки некоторого результата, так что мне нужно настроить cronjob.

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

Вот как я установил crontab:

*/30 * * * * php /var/www/html/result.php 

Я подтвердил, что мой каталог файлов верен. Что я не уверен в части времени: нельзя ли использовать */30 * * * * или 30 * * * * ? Я установил */30 * * * * и не работал.

Данный

 */30 * * * * php /var/www/html/result.php 

Существует несколько возможностей, почему он не работает:

1) Прежде всего важно проверить, выполняется ли простое выполнение php /var/www/html/result.php . Это необходимо. Но, к сожалению, выполнение этого не означает, что проблема решена.

2) Необходимо добавить путь к двоичному файлу php .

 */30 * * * * php /var/www/html/result.php 

для изменения

 */30 * * * * /usr/bin/php /var/www/html/result.php 

или что бы то ни было, исходя из which php .

3) Проверьте разрешение скрипта на пользователя, запускающего crontab.

Дайте разрешение на выполнение для файла: chmod +x file . И убедитесь, что crontab запускается пользователем, имеющим права на выполнение скрипта. Также проверьте, может ли пользователь получить доступ к каталогу, в котором находится файл.

4) Чтобы быть более безопасным, вы также можете добавить php-путь в начало скрипта, например:

 #!/usr/bin/php -q <?php ... ?> 

5) Убедитесь, что у пользователя есть права на использование crontab. Проверьте, находится ли он в файле /etc/cron.d/deny . Кроме того, сделайте базовый тест, чтобы узнать, является ли это проблемой crontanb или php.

 * * * * * touch /tmp/hello 

6) Выведите результат скрипта в файл журнала, как предложил Уильям Ниу .

 */30 * * * * /usr/bin/php /var/www/html/result.php > /tmp/result 

7) Используйте параметр -f для выполнения скрипта:

 */30 * * * * /usr/bin/php -f /var/www/html/result.php > /tmp/result 

Подводя итог , есть много возможных причин. Один из них должен решить проблему.

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

вы можете протестировать свои команды cron, отправив вывод в файл, например

 */30 * * * * php /var/www/html/result.php > /tmp/result.log 

На этой справочной странице в разделе «Crontab Environment»:

cron вызывает команду из домашнего каталога пользователя с оболочкой, (/ usr / bin / sh). cron предоставляет среду по умолчанию для каждой оболочки, определяя:

 HOME=user's-home-directory LOGNAME=user's-login-id PATH=/usr/bin:/usr/sbin:. SHELL=/usr/bin/sh Потребитель HOME=user's-home-directory LOGNAME=user's-login-id PATH=/usr/bin:/usr/sbin:. SHELL=/usr/bin/sh Потребитель HOME=user's-home-directory LOGNAME=user's-login-id PATH=/usr/bin:/usr/sbin:. SHELL=/usr/bin/sh 

Кроме того, синтаксис /30 может не поддерживаться всеми платформами, поэтому попробуйте изменить его на 0,30 вместо.

У меня была аналогичная проблема на Ubuntu 14.04.1 и проблема оказалась такой, как я модифицировал crontab:

Я использовал sudo crontab -e вместо crontab -e и это заставило меня игнорировать мои изменения.

Имел аналогичный вопрос; из командной строки это сработало, но из cron, нет.

имел «include (« ./connect.php »), в моем php-коде для db-материала.

Удалил это и добавил код connect.php непосредственно в php-скрипт, и он работал от cron.

После дня, озадачивающего, почему мой скрипт будет работать напрямую (чтобы отправить данные в электронном письме на учетную запись gmail), я обнаружил, что все преднамеренные отправки работали, когда я щелкнул URL-адрес, и все сообщения cron попали в спам. Не знаю, почему, но я думал, что поделюсь им.