Доброе утро, у меня на моем сервере убунут скрипт, который проверяет в базе данных какое-то значение и, если условие истинно, отправляет какое-то электронное письмо. Если я запускаю в браузере сценарий вроде:
http://www.my_site.com/reports/generate.php
Работает, почта пришла.
Если в моем crontab я напишу эту строку в файл / etc / crontab:
0 12 * * * root php /var/www/reports/generate.php
Это не работает, почта не приходит и стоимость такая же. Я проверил путь и верен, я даю разрешение 777 на этот файл, но не работает в cron.
Может кто-нибудь объяснить мне, почему в cron deos не работают?
Для завершения этого сценария потребуется около 5 минут.
Это syslog.log ссылка на скрипт
Jun 17 12:00:03 site /USR/SBIN/CRON[5352]: (root) CMD ( php /var/www/reports/generate.php)
Jun 17 12:00:07 site postfix/pickup[2834]: 10546128001: uid=0 from=<root>
Jun 17 12:00:07 site postfix/cleanup[5381]: 10546128001: message-id=<20130617100007.10546128001@site.localdomain>
Jun 17 12:00:07 site postfix/qmgr[3259]: 10546128001: from=<root@site.localdomain>, size=941, nrcpt=1 (queue active)
Jun 17 12:00:08 site postfix/local[5384]: warning: dict_nis_init: NIS domain name not set - NIS lookups disabled
Jun 17 12:00:08 site postfix/local[5384]: 10546128001: to=<vpsimple@site.localdomain>, orig_to=<root>, relay=local, delay=2, $
Jun 17 12:00:08 site postfix/cleanup[5381]: 438CD128002: message-id=<20130617100008.438CD128002@site.localdomain>
Jun 17 12:00:08 site postfix/qmgr[3259]: 438CD128002: from=<>, size=2759, nrcpt=1 (queue active)
Jun 17 12:00:08 site postfix/bounce[5386]: 10546128001: sender non-delivery notification: 438CD128002
Jun 17 12:00:08 site postfix/qmgr[3259]: 10546128001: removed
Jun 17 12:00:08 site postfix/local[5384]: 438CD128002: to=<xxx@site.localdomain>, orig_to=<root@site.localdomain>, re$
Jun 17 12:00:08 site postfix/qmgr[3259]: 438CD128002: removed
Jun 17 12:03:24 site kernel: Shorewall:net2fw:DROP:IN=eth0 OUT= MAC=00:16:3e:70:a5:ad:00:30:48:56:76:d3:08:00 SRC=122.228.129.25$
Jun 17 12:09:03 site /USR/SBIN/CRON[6104]: (root) CMD ( [ -x /usr/lib/php5/maxlifetime ] && [ -d /var/lib/php5 ] && find /var/l$
Jun 17 12:13:13 site kernel: Shorewall:net2fw:DROP:IN=eth0 OUT= MAC=00:16:3e:70:a5:ad:00:30:48:56:76:d3:08:00 SRC=61.188.37.237 $
Jun 17 12:15:32 site postfix/pickup[2834]: 2B3B1128001: uid=33 from=<www-data>
-------------------------РЕДАКТИРОВАТЬ---------------------
Я изменил файл crontab в этом режиме:
0 13 * * * root php /usr/bin/php -f /var/www/reports/generate.php 1>/dev/null 2>&1
и не работает, это новый syslog.log
Jun 17 13:00:03 site /USR/SBIN/CRON[9886]: (root) CMD ( php /usr/bin/php -f /var/www/reports/generate.php $
Jun 17 13:01:19 site kernel: Shorewall:net2fw:DROP:IN=eth0 OUT= MAC=00:16:3e:70:a5:ad:00:30:48:56:76:d3:08:00 SRC=122.141.177.11$
Jun 17 13:09:02 site /USR/SBIN/CRON[10624]: (root) CMD ( [ -x /usr/lib/php5/maxlifetime ] && [ -d /var/lib/php5 ] && find /var/$
Jun 17 13:17:02 site /USR/SBIN/CRON[11246]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly 1>/dev/null 2>&1)
Вы должны написать полный путь к исполняемому файлу php (возможно, / usr / bin / php):
0 12 * * * root /usr/bin/php -f /var/www/reports/generate.php
Параметр -f не является обязательным, но помогает парсеру php.
РЕДАКТИРОВАТЬ: пользователь root является обязательным в файлах, которые вы пишете в каталоге /etc/cron.{d, ежечасно, ежедневно, еженедельно, ежемесячно}, но если вы используете «старый» crontab (crontab -e), пользователь всегда является пользователем root и не требуется. Изучите "/ var / log / cron" Файл "/ var / log / syslog", чтобы обнаружить настоящую ошибку.
В вашей строке crontab измените строку с
0 12 * * * root php /var/www/reports/generate.php
к
0 12 * * * root /usr/bin/php /var/www/reports/generate.php
Возможно, если вы не определите путь php в файле crontab, скрипт не сможет работать. Чтобы проверить, может ли это быть проблемой до запуска сценария, попробуйте использовать хвост -f / var / журнал / системный журнал . Параметр -f выводит на экран все в реальном времени.
Так вы можете проверить, в чем должна быть ваша проблема. На этой странице указаны причины, по которым задание cron не запускается. Cron не запускается
К вашему сведению: если вы не хотите запускать PHP в crontab, вы всегда можете указать PHP внутри скрипта, добавив:
#! / usr / bin / php -q
К первой строчке скрипта. Это советует запускать сценарий под управлением PHP и устраняет необходимость добавления команды PHP в crontab перед фактическим сценарием.
Вышеупомянутое на самом деле хорошее решение также, когда вам нужно перечислить / наблюдать за процессами, происходящими в вашей системе. Если вы используете команду PHP перед сценарием, существует опасность, что в листинге процесса будет отображаться только он, а не только имя сценария.
Кроме того, если вы хотите избавить себя от получения данных выполнения из сценария в почтовый ящик (обычно в корни), вы можете добавить > / dev / null 2> & 1 после сценария.