2013-04-15 2 views
2

Я пытаюсь запустить автоматическую почтовую службу на основе SendGrid и cron. Я пробовал все возможные комбинации, чтобы заставить интерпретатор PHP запускать мой сценарий, , и хотя в журнале cron говорится, что задание выполняется каждую минуту, файл журнала, который я определил, остается пустым и никаких сообщений электронной почты не получено, и все работает нормально, когда я просматриваю страницу через браузер.crontab не работает php-скрипт правильно

mydev.com - это виртуальный хост, который я использую на своей машине, и я не внес никаких изменений в конфигурацию php (максимальное время выполнения и т. Д.).

Кроме того, я провел мое исследование в Интернете, и у меня установлен php5-cli и все требуемые зависимости.

ниже строки, которые я добавил в файл хрон после ввода SUDO кронтаб -e в терминале:

* * * * * php /var/www/mydev/dev/mailServiceTest.php >> /var/www/mydev/CRON_LOG.txt 2> /dev/null 
* * * * * /usr/bin/php /var/www/mydev/dev/mailServiceTest.php >> /var/www/mydev/CRON_LOG.txt 2> /dev/null 
* * * * * /usr/bin/php http://mydev.com/dev/mailServiceTest.php >> /var/www/mydev/CRON_LOG.txt 2> /dev/null 

* * * * * /usr/bin/lynx http://mydev.com/dev/mailServiceTest.php >> /var/www/mydev/CRON_LOG.txt 2> /dev/null 

А вот выход на бревне хрон:

Apr 15 15:13:01 oleg-Lenovo-G580 CRON[8948]: (root) CMD (/usr/bin/php http://mydev.com/dev/mailServiceTest.php >> /var/www/mydev/CRON_LOG.txt 2> /dev/null) 
Apr 15 15:13:01 oleg-Lenovo-G580 CRON[8947]: (root) CMD (php /var/www/mydev/dev/mailServiceTest.php >> /var/www/mydev/CRON_LOG.txt 2> /dev/null) 
Apr 15 15:13:01 oleg-Lenovo-G580 CRON[8949]: (root) CMD (/usr/bin/php /var/www/mydev/dev/mailServiceTest.php >> /var/www/mydev/CRON_LOG.txt 2> /dev/null) 
Apr 15 15:13:01 oleg-Lenovo-G580 CRON[8953]: (root) CMD (/usr/bin/lynx http://mydev.com/dev/mailServiceTest.php >> /var/www/mydev/CRON_LOG.txt 2> /dev/null) 
Apr 15 15:14:01 oleg-Lenovo-G580 CRON[8964]: (root) CMD (/usr/bin/lynx http://mydev.com/dev/mailServiceTest.php >> /var/www/mydev/CRON_LOG.txt 2> /dev/null) 
Apr 15 15:14:01 oleg-Lenovo-G580 CRON[8966]: (root) CMD (php /var/www/mydev/dev/mailServiceTest.php >> /var/www/mydev/CRON_LOG.txt 2> /dev/null) 
Apr 15 15:14:01 oleg-Lenovo-G580 CRON[8965]: (root) CMD (/usr/bin/php http://mydev.com/dev/mailServiceTest.php >> /var/www/mydev/CRON_LOG.txt 2> /dev/null) 
Apr 15 15:14:01 oleg-Lenovo-G580 CRON[8970]: (root) CMD (/usr/bin/php /var/www/mydev/dev/mailServiceTest.php >> /var/www/mydev/CRON_LOG.txt 2> /dev/null) 
Apr 15 15:15:01 oleg-Lenovo-G580 CRON[8992]: (root) CMD (/usr/bin/php /var/www/mydev/dev/mailServiceTest.php >> /var/www/mydev/CRON_LOG.txt 2> /dev/null) 
Apr 15 15:15:01 oleg-Lenovo-G580 CRON[8994]: (root) CMD (php /var/www/mydev/dev/mailServiceTest.php >> /var/www/mydev/CRON_LOG.txt 2> /dev/null) 
Apr 15 15:15:01 oleg-Lenovo-G580 CRON[8993]: (root) CMD (/usr/bin/php http://mydev.com/dev/mailServiceTest.php >> /var/www/mydev/CRON_LOG.txt 2> /dev/null) 
Apr 15 15:15:01 oleg-Lenovo-G580 CRON[8998]: (root) CMD (/usr/bin/lynx http://mydev.com/dev/mailServiceTest.php >> /var/www/mydev/CRON_LOG.txt 2> /dev/null) 
Apr 15 15:16:01 oleg-Lenovo-G580 CRON[9009]: (root) CMD (/usr/bin/php /var/www/mydev/dev/mailServiceTest.php >> /var/www/mydev/CRON_LOG.txt 2> /dev/null) 
Apr 15 15:16:01 oleg-Lenovo-G580 CRON[9011]: (root) CMD (php /var/www/mydev/dev/mailServiceTest.php >> /var/www/mydev/CRON_LOG.txt 2> /dev/null) 
Apr 15 15:16:01 oleg-Lenovo-G580 CRON[9012]: (root) CMD (/usr/bin/lynx http://mydev.com/dev/mailServiceTest.php >> /var/www/mydev/CRON_LOG.txt 2> /dev/null) 
Apr 15 15:16:01 oleg-Lenovo-G580 CRON[9010]: (root) CMD (/usr/bin/php http://mydev.com/dev/mailServiceTest.php >> /var/www/mydev/CRON_LOG.txt 2> /dev/null) 

Любая помощь очень ценится !.

О.

EDIT:

Ниже приведен код, который должен быть выполнен:

<?php 
require_once($_SERVER['DOCUMENT_ROOT'] . '/classes/mailingService.php'); 

$myMail = new mailingService(); 
$myMail->execute(); 
$myMail->outputDuration(); 

?> 

Теперь, даже если я добавить 'эхо 1;' в начале файла или в конце его ничего не меняется, и выходной файл CRON_LOG.txt остается пустым

+1

Эта строка выглядит нормально '* * * * */usr/bin/php /var/www/mydev/dev/mailServiceTest.php >> /var/www/mydev/CRON_LOG.txt 2>/dev/null' , У вас есть абсолютные пути в вашем скрипте? Правильно ли работает, если выполняется вручную? – fedorqui

+0

Нет моего сценария, который использует суперсервер DOCUMENT_ROOT SERVER для включения любых файлов, которые он использует. И да, при доступе вручную через браузер все работает нормально. –

+0

Вы уверены, что этот пользователь выполняется, так как имеет права на rwx в каталоге '/ var/www/mydev /' и, по крайней мере, rw-разрешения на '/ var/www/mydev/CRON_LOG.txt'? Также вы абсолютно уверены, что вывод, который вы хотите, записывается в STDOUT скрипта PHP? – DaveRandom

ответ

5

$ _SERVER ['DOCUMENT_ROOT'] - это переменная веб-сервера. CRON не использует apache при выполнении сценариев.

1
          • PHP /var/www/mydev/dev/mailServiceTest.php

Есть ли «php» в пути демона cron?

          • /USR/бен/PHP/вар/WWW/mydev/DEV/mailServiceTest.? PHP

лучше (вы убедитесь, что это правильный путь для PHP

В основном это имеет смысл - но если вам нужно запустить любая команда с частотой один раз в минуту, а затем ее запуск через cron - далеко не идеальное решение.

мой скрипт использует document_root SERVER супер глобальной

Но это бессмысленно/нуль для CLI SAPI

Это не собирается делать то, что вы ожидаете.

может работать, но рысь предназначена в качестве управляемого пользователя браузера, и, возможно, даже не начнется в этом контексте - Wget или локон будет лучше.

Из cron log crond делает именно то, что он должен.

То, что вы выбрасываете STDERR, означает, что у вас нет видимости большого количества сообщений об ошибках. И вы также не пишете ничего полезного для STDOUT. Обновлена ​​ли временная метка на файлах целевого журнала?

Вы установили файл crontab или просто отредактировали его?

Если вам нужен DOCUMENT_ROOT, вам необходимо получить доступ к скрипту через HTTP - убедитесь, что ваша система может разрешить свое имя и использовать wget или curl (т. Е. Попробуйте wget http://mydev.com/dev/mailServiceTest.php из сеанса ssh).

+0

Предпочтительно использовать пространства имен в этом сценарии. Будет ли это работать? –

+0

Пространства имен не имеют ничего общего с описанной проблемой – symcbean

+0

В этом вопросе лота вопросов было бы неплохо, если бы были ответы. Например, «вы подтвердили, что это правильный путь для php?». Как это проверить? – DaveWalley

Смежные вопросы