Страница 1 из 3

Не выполняется скрипт по заданию (cron)

Добавлено: 08 авг 2016, 10:25
Vitalik
Здравстуйте, перед тем как писать сюда - перечитал все что связано с cron, как здесь так и на сторонних ресурсах. Почему-то не выполняется скрипт, хотя в логах все хорошо, ежеминутно (как и запланировал) выполняется. По рекомендациям для проверки создал два файла, cron.php и cron.txt которые находятся в корне сайта test.ru, в cron.php поместил скрипт:
<?php 

  $fd = fopen("cron.txt","a"); 

  fwrite($fd, "Обращение к файлу - ".date("d.m.Y H:i")."\r\n"); 

  fclose($fd); 

?>

Тоесть, при каждом выполнении скрипта cron.php - в файле cron.txt должно прописываться следующее:
Обращение к файлу - 11.01.2011 22:13

Обращение к файлу - 11.01.2014 22:14

Обращение к файлу - 11.01.2014 22:15

Обращение к файлу - 11.01.2014 22:16

Обращение к файлу - 11.01.2014 22:17
что и прописывается если запускать скрипт в ручном режиме (обновлением через браузер), через планировщик почему-то не работает, разные вариант перепробовал, уже незнаю где копать, пможет что-то упустил что лежит на поверхности?

Вот пути планировщика:
%progdir%\modules\php\%phpdriver%\php-win.exe -c %progdir%\modules\php\%phpdriver%\php.ini -q -f %sitedir%\test.ru\cron.php
файл php-win.exe и php.ini по данным путям - существуют, в системных файлах ничего не трогал и не менял после того как установил OpenServer (только месяц или полтора тому назад).

Настройки:
*/1 * * * *
Логи:
08 Aug 10:12:00 Start: d:\openserver\modules\php\PHP-5.5\php-win.exe -c d:\openserver\modules\php\PHP-5.5\php.ini -q -f d:\openserver\domains\test.ru\cron.php
08 Aug 10:12:00 Start result: 0
08 Aug 10:13:00 Start: d:\openserver\modules\php\PHP-5.5\php-win.exe -c d:\openserver\modules\php\PHP-5.5\php.ini -q -f d:\openserver\domains\test.ru\cron.php
08 Aug 10:13:00 Start result: 0
08 Aug 10:14:00 Start: d:\openserver\modules\php\PHP-5.5\php-win.exe -c d:\openserver\modules\php\PHP-5.5\php.ini -q -f d:\openserver\domains\test.ru\cron.php
08 Aug 10:14:00 Start result: 0
08 Aug 10:15:00 Start: d:\openserver\modules\php\PHP-5.5\php-win.exe -c d:\openserver\modules\php\PHP-5.5\php.ini -q -f d:\openserver\domains\test.ru\cron.php
08 Aug 10:15:00 Start result: 0
08 Aug 10:16:00 Start: d:\openserver\modules\php\PHP-5.5\php-win.exe -c d:\openserver\modules\php\PHP-5.5\php.ini -q -f d:\openserver\domains\test.ru\cron.php
08 Aug 10:16:00 Start result: 0
08 Aug 10:17:00 Start: d:\openserver\modules\php\PHP-5.5\php-win.exe -c d:\openserver\modules\php\PHP-5.5\php.ini -q -f d:\openserver\domains\test.ru\cron.php
08 Aug 10:17:00 Start result: 0
08 Aug 10:18:00 Start: d:\openserver\modules\php\PHP-5.5\php-win.exe -c d:\openserver\modules\php\PHP-5.5\php.ini -q -f d:\openserver\domains\test.ru\cron.php
08 Aug 10:18:00 Start result: 0
08 Aug 10:19:00 Start: d:\openserver\modules\php\PHP-5.5\php-win.exe -c d:\openserver\modules\php\PHP-5.5\php.ini -q -f d:\openserver\domains\test.ru\cron.php
08 Aug 10:19:00 Start result: 0
08 Aug 10:20:00 Start: d:\openserver\modules\php\PHP-5.5\php-win.exe -c d:\openserver\modules\php\PHP-5.5\php.ini -q -f d:\openserver\domains\test.ru\cron.php
08 Aug 10:20:00 Start result: 0
08 Aug 10:21:00 Start: d:\openserver\modules\php\PHP-5.5\php-win.exe -c d:\openserver\modules\php\PHP-5.5\php.ini -q -f d:\openserver\domains\test.ru\cron.php
08 Aug 10:21:00 Start result: 0
08 Aug 10:22:00 Start: d:\openserver\modules\php\PHP-5.5\php-win.exe -c d:\openserver\modules\php\PHP-5.5\php.ini -q -f d:\openserver\domains\test.ru\cron.php
08 Aug 10:22:00 Start result: 0
08 Aug 10:23:00 Start: d:\openserver\modules\php\PHP-5.5\php-win.exe -c d:\openserver\modules\php\PHP-5.5\php.ini -q -f d:\openserver\domains\test.ru\cron.php
08 Aug 10:23:00 Start result: 0
08 Aug 10:24:00 Start: d:\openserver\modules\php\PHP-5.5\php-win.exe -c d:\openserver\modules\php\PHP-5.5\php.ini -q -f d:\openserver\domains\test.ru\cron.php
08 Aug 10:24:01 Start result: 0

Re: Не выполняется скрипт по заданию (cron)

Добавлено: 08 авг 2016, 11:47
Vitalik
Хм..., странно, сейчас попробовал вот такой скрипт:
 $db = mysqli_connect("localhost", "root", "", "test"); 

  $query = "INSERT INTO test (date) VALUES (NOW())";

  mysqli_query($db, $query);
и все работает нормально, в таблицу "test" БД данные прописываются ежеминутно, как и запланировано, но почему тогда выше скрипт не срабатывает? Дело в том, что мне нужно получать данные в формате json через api, и соответственно скрипт:
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $fields); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); 
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
$result = curl_exec($ch); 
curl_close($ch); 
print_r($result);
$results = json_decode($result, true);
echo "<pre>"; print_r($results);

Который также через cron не работает почему то, хотя при обновлении странички - данные (остатков на складе) обновляются. Кто сталкивался с подобной проблемой, напишите пожалуйста что делаю не так. Спасибо.

Re: Не выполняется скрипт по заданию (cron)

Добавлено: 08 авг 2016, 13:33
Asmodey
Оно пишет файл не туда, куда Вам кажется, должно писать.

Re: Не выполняется скрипт по заданию (cron)

Добавлено: 08 авг 2016, 14:32
Vitalik
Asmodey писал(а):Оно пишет файл не туда, куда Вам кажется, должно писать.
Возможно да, путь иной нужно прописывать, но почему тогда неработает скрипт с curl? ведь там нет никаких путей для записи сработанного скрипта, в ручном режиме все работает при обновлении страницы..

Re: Не выполняется скрипт по заданию (cron)

Добавлено: 08 авг 2016, 15:16
Asmodey
Так что считать результатом работы? Чего-то откуда-то качает и печатает в консоль.
Или это не весь скрипт?
Какие значения $url, $fields?
Что в $result и в $results?

Лучше там не принт и эхо, а записать в файл. Только файло хранить относительно __DIR__, когда будет понятно где они лежат.

Re: Не выполняется скрипт по заданию (cron)

Добавлено: 08 авг 2016, 16:51
Vitalik
Asmodey писал(а):Так что считать результатом работы? Чего-то откуда-то качает и печатает в консоль.
Или это не весь скрипт?
Какие значения $url, $fields?
Что в $result и в $results?

Лучше там не принт и эхо, а записать в файл. Только файло хранить относительно __DIR__, когда будет понятно где они лежат.
Значение $url - ('http://site.ru/handler_api.php?api_key= ... ProductCol')
Дело в том, что мне нужно по api получать данные (количество) определенных товаров, которое периодически меняются.
По поводу конфигурации curl, $fields и т.д.., возможно это лишнее, изначально пробовал так:
$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, 'http://site.ru/handler_api.php?api_key=$***************&action=getProductCol');

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$result = curl_exec($ch);

curl_close($ch);

print_r($result);

$results = json_decode($result, true);

 

echo "<pre>"; print_r($results);
В итоге получаю ответ от сервера в json формате, пример:
[{"product1":"300","product2":"300","product3":"1","product4":"299"}]

Array

(

    [0] => Array

        (

            [product1] => 300

            [product2] => 300

            [product3] => 1

            [product4] => 299

        )

 

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

Мне нужно в конечном итоге получать переменные со значением (300, 234, 76 и т.д.), что бы каждое из значений потом стилизировать и назназначить определенному товару, но это уже другая тема, нужно что бы все это работало (выполнялось) через cron

Re: Не выполняется скрипт по заданию (cron)

Добавлено: 08 авг 2016, 18:15
Asmodey
У Вас несколько этапов. Посему надо определить, что именно не отрабатывает по крону.
1. Получение данных с чужого сайта.
2. Обработка.
3. Запихивание в БД.
$log = fopen(__DIR__.'/log.txt','a');
//Файл лога будет лежать рядом со скриптом.

//1. этап
...
//Логирование результатов первого этапа
... и т.д.
Иначе, гадание по кофейной гуще.

Re: Не выполняется скрипт по заданию (cron)

Добавлено: 08 авг 2016, 19:12
Vitalik
Asmodey писал(а):У Вас несколько этапов. Посему надо определить, что именно не отрабатывает по крону.
1. Получение данных с чужого сайта.
2. Обработка.
3. Запихивание в БД.
Иначе, гадание по кофейной гуще.
1. Не отрабатывается получение данных с чужого сайта по API

Поставил данную строчку кода в файл, перезапустил сервер, вот логи из планировщика:
08 Aug 19:06:09 Start nnCron
08 Aug 19:06:09 Load cron.tab
08 Aug 19:06:09 Start: d:\openserver\modules\php\PHP-5.5\php-win.exe -c d:\openserver\modules\php\PHP-5.5\php.ini -q -f d:\openserver\domains\test.ru\cron.php
08 Aug 19:06:09 Start result: 0
08 Aug 19:07:00 Start: d:\openserver\modules\php\PHP-5.5\php-win.exe -c d:\openserver\modules\php\PHP-5.5\php.ini -q -f d:\openserver\domains\test.ru\cron.php
08 Aug 19:07:00 Start result: 0
08 Aug 19:08:00 Start: d:\openserver\modules\php\PHP-5.5\php-win.exe -c d:\openserver\modules\php\PHP-5.5\php.ini -q -f d:\openserver\domains\test.ru\cron.php
08 Aug 19:08:00 Start result: 0
08 Aug 19:09:00 Start: d:\openserver\modules\php\PHP-5.5\php-win.exe -c d:\openserver\modules\php\PHP-5.5\php.ini -q -f d:\openserver\domains\test.ru\cron.php
08 Aug 19:09:00 Start result: 0
08 Aug 19:10:00 Start: d:\openserver\modules\php\PHP-5.5\php-win.exe -c d:\openserver\modules\php\PHP-5.5\php.ini -q -f d:\openserver\domains\test.ru\cron.php
08 Aug 19:10:00 Start result: 0
а в файле log.txt логов нет, даже если вручную запуcкаю файл cron.php с данной строчкой кода внутри.

Re: Не выполняется скрипт по заданию (cron)

Добавлено: 08 авг 2016, 21:06
Asmodey
Vitalik писал(а):...в файле log.txt логов нет, даже если вручную запуcкаю файл cron.php с данной строчкой кода внутри.
Вот тебе и раз. :( Так надо начинать отсюда. Почему в файл не пишется информация-то.
Сам файл создаётся?
Как пишете в него лог?

Re: Не выполняется скрипт по заданию (cron)

Добавлено: 08 авг 2016, 22:38
Vitalik
Asmodey писал(а):
Vitalik писал(а):...в файле log.txt логов нет, даже если вручную запуcкаю файл cron.php с данной строчкой кода внутри.
Вот тебе и раз. :( Так надо начинать отсюда. Почему в файл не пишется информация-то.
Сам файл создаётся?
Как пишете в него лог?
Текстовый файл log.txt создался автоматически, но он пуст, а что должно записываться в нем? я так понял что если он создается автоматически, значит cron работает и пути прописаны верно? тогда почему не выполняет стандартные curl скрипт? уже на англоязычных ресурсах все перерыл по разным запросам и ничего ненашел что бы навело меня на подсказку((