Я создал один файл 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 попали в спам. Не знаю, почему, но я думал, что поделюсь им.