Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
 
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> Как объединить несколько заданий Cron в один файл, Обновление прайсов товаров в БД
Евгений1721  
 ۩  [x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 1
Пользователь №: 42005
На форуме: 1 год, 1 месяц, 11 дней
Карма:




Здравствуйте, подскажите пожалуйста

Как объединить несколько заданий Cron.php (Обновление ЦенТоваров) в один файл (Cron1.php, Cron2.php, Cron3.php и т.д. будет добавляться со временем)

Дано:
Файл CeniTovary.csv (Внем содержаться цены на товар). АртикулТовара^Цена. Пример:

36^1450,00
37^2450,00
38^3450,00
39^4450,00
40^5450,00
----------
20356^130,00


Файл Script1.php // Разбивает большой CeniTovary.csv(Прайс товаров) на МаленькиеФайлы.csv запускается по средствам задания Cron. Создает file1.csv; file2.csv; file3.csv

<?php
$start_time = microtime(true);

$csv_array = file('/home/www/site.ru/CeniTovary.csv'); // считываем файл необходим для разделения

$strings_in_file = 2000; //указываем количество строк для разделения
$string_counter = 0; //позиция строк
$file_counter = 1; //счетчик контейнеров для файлов разбива

for($i=0; $i<count($csv_array); $i++)
{
//если счетчик разбива равен $strings_in_file закрываем старый файл и добавляем 1 к $file_counter
if($string_counter == $strings_in_file)
{
$string_counter = 0; //обнуляем позицию строк после записи
fclose($fp);
unset($fp); // Удаляет переменную
echo "Файл file$file_counter.csv успешно создан<br>";
$file_counter++;
}
//если файл для записи не открыт открываем его
if(!$fp) $fp = fopen('/home/www/site.ru/file'.$file_counter.'.csv', 'w'); // 'w' Открывает файл только для записи; помещает указатель в начало файла и обрезает файл до нулевой длины. Если файл не существует - пробует его создать.

//записываем строку и прибавляем к счетчику 1

fputs($fp, $csv_array[$i]); // Бинарно-безопасная запись в файл
$string_counter++; // Добавляем +1 к контейнеру
}
if($fp){
fclose($fp);
echo "Файл file$file_counter.csv успешно создан<br>";
}
$exec_time = microtime(true) - $start_time;// выполнение действий
echo "<p>".'Время исполнения '.$exec_time."</p>";
?>


Файлы Cron1.php; Cron2.php; Cron3.php (Будут добавляться)// Подгружают Прайсы товаров в БД запускаются по средствам задания в Cron

<?php
// Cron1.php // Cron2.php и Cron3.php аналогичны, подключают только file2.csv и file3.csv соответственно
$start_time = microtime(true);

if ($handle = fopen("/home/www/site.ru/file1.csv", "r")){ // Путь

$dblocation = "server.adress.ru"; //замените localhost на свой адрес сервера БД
$dbname = "admin"; // измените bdname на ваше Название БД
$dbuser = "admin"; // bduser замените на ваш Логин пользователя БД
$dbpasswd = "12345"; // Пароль пользователя БД
$pref = "555_"; //Префикс для названия таблиц в БД

$dbcnx = mysql_connect($dblocation, $dbuser, $dbpasswd);
if (!$dbcnx)
{
echo "<p>К сожалению, не доступен сервер mySQL</p>";
exit();
}
if (!mysql_select_db($dbname,$dbcnx) )
{
echo "<p>К сожалению, не доступна база данных</p>";
exit();
}
mysql_query ("set character_set_client='utf8'");
mysql_query ("set character_set_results='utf8'");
mysql_query ("set collation_connection='utf8'");

// Обновление прайсов в БД
while (($data = fgetcsv($handle, 0, "^")) !== FALSE) {
$select = mysql_query("SELECT `virtuemart_product_id` FROM `".$pref."virtuemart_products` WHERE `product_sku` = '$data[0]' ");
$product_id = mysql_result($select,0);
// Обновление цен товаров в БД
$update1 = mysql_query("UPDATE `".$pref."virtuemart_product_prices` SET `product_price` = '$data[1]' WHERE `virtuemart_product_id` ='$product_id'");
}

echo "О, чудо Файл file1.csv экспортирован в БД успешно. Всё прошло успешно!"";
$exec_time = microtime(true) - $start_time;// выполнение действий
echo "
<p>".'Время исполнения '.$exec_time."</p>";
fclose(
$handle);
}else{
echo 'Файл не открыт';
}
?>



Резюме: Все это сделано с той целью что бы не перегружать выполнение скрипта на сервере хостинга (не более 30 сек), т.к. исходный ФайлПрайсТовары.csv достаточно большой, если весь разом грузить через Cron1.php -> ФайлПрайсТовары.csv, то сервер выдает ошибку "Превышен интервал времени исполнения и т.д. (Ошибка 502 вроде)"

Сейчас заданий Cron уже 4 шт. (В процессе они только будут добавляться)

Время (23.00 каждый день) Задание
00 23 * * * /home/www/site.ru/Script1.php
01 23 * * * /home/www/site.ru/Cron1.php
02 23 * * * /home/www/site.ru/Cron2.php
03 23 * * * /home/www/site.ru/Cron3.php


Вопрос: Подскажите пожалуйста можно ли как то это все прописать Одним файлом и как следствие использовать одно задание Cron при этом не вызывая перезагрузки сервера на выполнения всех операций этих скриптов (Script1.php и Cron1.php; Cron2.php и др.)

Это сообщение отредактировал Евгений1721 - 22.10.2015 - 21:24

Присоединённый файл ( Кол-во скачиваний: 0 )
Присоединённый файл  ДляВопроса.zip
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
stump  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1067
Пользователь №: 40808
На форуме: 1 год, 10 месяцев, 11 дней
Карма: 14




1. bash скрипт написать и установить крон на выполнение баш скрипта!
2. Написать класс который будет запускать скрипты по расписанию (например есть у ларавель: http://laravel.com/docs/5.1/scheduling#introduction);


--------------------
Трус не играет в хокей
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Valick  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 5491
Пользователь №: 35718
На форуме: 4 года, 14 дней
Карма: 167




очередной бедлам с запросами в цикле...

Евгений1721, даже не знаю с чего начать на вас "ругаться".


--------------------
wmr - R281553014107
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
netruxa  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 472
Пользователь №: 4715
На форуме: 8 лет, 8 месяцев, 1 день
Карма: 19




не совсем понял, о чем вопрос, но вместо тех трех строк в кроне, сделал бы одну

1-3 23 * * * /home/www/site.ru/Cron.php

а в файле Cron.php сделал бы так:

if ($handle = fopen("/home/www/site.ru/file".date("i").".csv", "r")){  


т.е. в 1 минуту будет открываться файл file1.csv, через минуту file2.csv и тд)


--------------------
ввв.парсер.рф - онлайн система проверки позиций Вашего сайта в поисковиках. Для форумчан 100 рублей на счет.
PMСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

Опции сообщения  Включить смайлики?
 Включить подпись?
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темы Ответ в темуСоздание новой темыСоздание опроса