Счетчик итераций при длительном процессе

Углубленное изучение Битрикс
  • Счетчик итераций при длительном процессе

    Антон Долганин 29 Октября 2015 7:46 1253
    Вот запустили вы на обновление огромный каталог в шелле. Как понять, идет ли процесс? Да, можно заморочиться с индикатором. А можно писать в лог, но не обычным способом.

    В моем случае я пишу в лог не только список обновлений вообще, но и список успешных и не успешных.
    Вот вся магия:
    if (!empty($update)) {
       $file = '/home/bitrix/www/bitrix/php_interface/cron/y';
       $company->update($row['ID'], $update);
    } else {
       $file = '/home/bitrix/www/bitrix/php_interface/cron/n';
    }
    $f = fopen($file, 'a+');
    fwrite($f, '.');
    fclose($f); 

    Перодически посматривая на файлы счетчиков, мы видим, идет ли процесс, и на какой стадии.

    2015-10-29_10-45.png

    Так как добавляем мы по байту в файл, то и размер его будет равен количеству итераций.

    PS: Вот тут в комментах Андрей предлагает еще прикольный способ: https://dev.1c-bitrix.ru/community/webdev/user/11948/blog/14972/?commentId=71862#com71862
Алексей
29 Октября 2015 10:05
Я вот так делаю
ob_start(); echo '<pre>';var_dump($arDebug);echo "</pre>\n";  
$body = ob_get_contents(); ob_end_clean();$f=@fopen('fail_'.md5('ololo_').".txt","a+");  
fputs($f,"$body");  
fclose($f); 

.
Foo Bar
29 Октября 2015 11:10
ob_start(); echo '<pre>';var_dump($arDebug);echo "</pre>\n";  
$body = ob_get_contents(); ob_end_clean();$f=@fopen('fail_'.md5('ololo_').".txt","a+";);  
fputs($f,"$body";);  
fclose($f); 


От чего не:
$info = var_export($arDebug, true);
$info .= "\n".str_repeat('-', 10)."\n"; 
$fileName = sprintf('fail_%s.txt', md5('ololo_'));
file_put_contents($fileName, $info, FILE_APPEND); 

.
ivan panfilov
29 Октября 2015 11:18
Если много товаров надо бить на задания (пачки по 100 элементов например) и запускать их через очередь.
Иначе может быть так что скрипт отвалится на полдороге и давай все по новой.
ivan panfilov
29 Октября 2015 11:20
а писать по байтику на каждое обновление - не лучший способ.
опять же пачкой надо писать - для улучшения быстродейсвия и уменшения кол-ва операций ввода вывода