Cron работает, но функциональность не работает
у меня есть несколько файлов PHP для запуска cron. Я настроил Кронов с помощью команды -
crontab crontab.txt
внутри crontab.txt-файл, я написал команды cron следующим образом: -
#(Updating tutor activities) - every minute
* * * * * /usr/bin/wget -O - -q -t 1 http://project/cron/tutor_activities.php
но ни одна из функций не работает (запросы к базе данных, отправка напоминаний и т. д.). Запуск URL-адресов вручную работает.
затем я поместил свой почтовый адрес в MAILTO
и получил письма. По почте, я получил весь HTML-код страницы. Что ожидается по почте? Почему мои функции не работают?
обновления
Если я изменю команды cron на
#(Updating tutor activities) - every minute
* * * * * /usr/bin/wget http://project/cron/tutor_activities.php
все еще нет успеха, и это приходит в мою почту -
--15:03:01-- http://project/cron/tutor_activities.php
=> `tutor_activities.php'
Resolving project... IP Address
Connecting to test.project|IP Address|:80... connected.
HTTP request sent, awaiting response... 301 Moved Permanently
Location: http://project./ [following]
--15:03:01-- http://project./
=> `index.html.1'
Resolving project.... IP Address
Connecting to project.|IP Address|:80... connected.
HTTP request sent, awaiting response... 302 Found
Location: http://project/home/ [following]
--15:03:01-- http://project/home/
=> `index.html.1'
Resolving project... IP Address
Connecting to wproject|IP Address|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: unspecified [text/html]
index.html.1 has sprung into existence.
Retrying.
и серии index.html.1
, index.html.2
файлы накапливаются в корне моего проекта. Я не хочу, чтобы эти файлы создавались. Просто хочу, чтобы файлы выполнялись.
те же результаты, если я использую любую из двух команд -
* * * * * /usr/bin/wget http://project/cron/tutor_activities.php
* * * * * wget http://project/cron/tutor_activities.php
под управлением С MAILTO
set отправляет мне эту ошибку /bin / sh: php: команда не найдена.
* * * * * php /path/to/test.php
Итак, я не могу использовать .
я написал простой mailto()
внутри моего теста.РНР. Почта не приходит при запуске через cron (используя оба wget
и php
сбой), но запуск URL-адреса вручную работает.
моя проблема
Чтобы прояснить это снова, моя главная проблема что функциональность внутри файлов cron не работает. Создание файлов является вторичной проблемой.
любая помощь будет оценили
спасибо,
Sandeepan
7 ответов
Если вы хотите вызвать url как cronjob, вам придется использовать что-то вроде команды wget. если это php-скрипт на вашем сервере, было бы проще использовать php /...pathtomyscript.../cron/tutor_activities.php
попробовать
какой php
путь, который возвращается должен быть помещен с командой, которая передается для запуска файла Cron.Если вы настраиваете Cron через оболочку, это не даст никаких проблем,но будьте уверены, попробуйте дать абсолютный путь, когда вы пытаетесь запустить php-страницу.
/ path /to/php/path/to/cron / скрипт/
попробуйте дать вашему comand как это, если проблема упорствует;чувствуйте свободным к обсуждать.
когда вы вызываете wget с - O -, он отправит загруженный контент в stdout,который cron отправляет вам по электронной почте. В первом случае он делает именно то, что должен.
когда вы вызываете wget witout - O параметр, он попытается сохранить загруженный контент в виде файла с тем же именем, что и загружаемая веб-страница. Если он существует, он добавит инкремент к имени, как вы видели. В этом втором случае он делает именно так и должно быть.
из вашего вопроса неясно, куда вы хотите отправить вывод, но если вы хотите сохранить вывод в один и тот же файл каждый раз, используйте - O myfilename.HTML-код.
Если вы используете PHP из cron / командной строки, убедитесь, что вы поставили полный путь к исполняемому файлу php
вполне возможно, что PHP не находится в пути в среде cron - он определенно не будет иметь той же настройки, что и ваша обычная оболочка. Попробуйте использовать абсолютный путь к интерпретатору php и скрипту php в команде cron:
* * * * * /path/to/php /path/to/test.php
что касается создания файлов, вам просто нужно добавить перенаправление в команду wget:
wget -O - ... http://.... > /dev/null
-O -
заставляет wget писать все, что он загружает на стандартный вывод, который cron будет счастливо письмо к вам. Добавив > /dev/null
В конце команды этот вывод будет вместо этого идти большой Bitbucket в небе. Если вы не хотите, чтобы вывод stderr wget отправлялся по электронной почте, вы также можете добавить 2&>1
после /dev/null
, который далее перенаправляет stderr в stdout, который теперь собирается /dev / null.
Я сам нашел проблему. Я не поместил тот же URL в файл crontab, который я запускал вручную, и это была моя ошибка.
при запуске вручную я просто набирал тест в URL-адресе, список сохраненных URL-адресов моих браузеров появлялся, и я выбирал URL http://www.test.project.com/cron/tutor_activities.php
, но в файле crontab я поставил http://test.project.com/cron/tutor_activities.php
. Я ошибочно предполагал, что это будет работать http://www.test.project.com/cron/tutor_activities.php
(потому что у нас есть правило перезаписи, чтобы добавить www
)
но правило перезаписи был перенаправление на http://www.test.project.com/home
. Вот почему содержимое HTML в письмах.
Итак, самое главное, чтобы узнать здесь, чтобы убедиться, что мы не пропускаем мельчайшие вещи и не предполагаем, что мы сделали все правильно. В моем случае лучше скопировать-вставить рабочий URL в файл cron.
простой и безопасный (без файлов tmp) способ сделать это-использовать замену процесса bash:
* * * * * bash -c "/path/to/php <(/usr/bin/wget -O - -q -t 1 http://project/cron/tutor_activities.php)"
процесс подстановки запускает команду в <()
и помещает вывод в объект file, который виден только из текущего процесса. Чтобы использовать его из cron, вызовите bash напрямую и передайте его как командную строку.
и, как уже упоминалось, используйте полный путь к php, который вы можете узнать с помощью which php
.