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.