[Решен] cron batch

Вс, 28/05/2017 - 17:26

Всем привет
запускаю скрипт через cron и batch

function module_cron()
$batch = array(
    'operations' => array(
      array('csv_import_operation', array($file_csv)),
      ),
    'finished' => 'load_finished_callback',
    'title' => t('Processing large CSV'),
    'init_message' => t('Large CSV Batch is starting.'),
    'progress_message' => t('Processed @current out of @total.'),
    'error_message' => t('Large CSV Batch has encountered an error.'),
  );
    batch_set($batch);
    $batch = &batch_get();
    $batch['progressive'] = FALSE;
    batch_process();
  }
}

примерно через полчаса работы он останавливается, без каких либо ошибок.
При запуске через форму (не через крон) все работает, не останавливается.
Куда копать?

0 Спасибо

Лучший ответ

Аватар пользователя Olegars
2 months 2 недели назад Olegars #
bsyomov написал:
По мне, такие вещи на порядок разумнее, проще и эффективнее, запускать как drush command вне контекста веб сервера, без всяких батчей, и ограничения времени выполнения.

я тут не очень в теме, надо покопать

gun_dose написал:
У батча есть ограничение по времени?

а где там ограничение времени? Я не в курсе.
Вообще смотрю в сторону queue

0 Спасибо

Комментарии

Аватар пользователя BatKor
2 months 3 недели назад BatKor #

и 'error_message' => t('Large CSV Batch has encountered an error.'), не вылетает?

0 Спасибо
Аватар пользователя Olegars
2 months 3 недели назад Olegars #

все чисто, нигде ничего. Единственное место где может быть ошибка вот

 try {
      node_save($node);;
      } catch (Exception $e) {
     watchdog('module', $e->getMessage());
    }

ни каких зацепок

0 Спасибо
Аватар пользователя Olegars
2 months 3 недели назад Olegars #

да и без крона работает все

0 Спасибо
Аватар пользователя gun_dose
2 months 3 недели назад gun_dose #

Какая периодичность запуска крона?

0 Спасибо
Аватар пользователя Olegars
2 months 3 недели назад Olegars #

руками запускаю, ссылкой "Для запуска cron вне сайта используйте ссылку...."
правда страницу закрываю, может из за этого? Но тогда почему пол часа он работает....

0 Спасибо
Аватар пользователя gun_dose
2 months 3 недели назад gun_dose #

На каждой итерации батча происходит бутстрапинг друпала, соответственно, если придёт время запускаться крону, то он запустится и батч стартанёт повторно. По мне, для порядка надо на старте батча устанавливать переменную, а на финише сбрасывать её значение, и перед стартом проверять эту переменную и запускать батч только в том случае, если предыдущий завершён.

0 Спасибо
Аватар пользователя BatKor
2 months 3 недели назад BatKor #

Сложно отловить крон.
Дебагером можно пальцы за мазолить.
К сожалению я не в компетенции ответить. Но интересно, что другие по советуют.

0 Спасибо
Аватар пользователя Olegars
2 months 3 недели назад Olegars #

да тут не понятно что дебажить, скрипт через форму работает без проблем, значит крон что то... Я просто не допонимаю как он работает, как он поддерживает работу скрипта в фоновом режиме

0 Спасибо
Аватар пользователя Olegars
2 months 3 недели назад Olegars #

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

0 Спасибо
Аватар пользователя Olegars
2 months 3 недели назад Olegars #

и еще везде пишут что batch после сбоя начинает работу с места где остановился, чо та у меня не получается такой трюк

0 Спасибо
Аватар пользователя BatKor
2 months 3 недели назад BatKor #

Листинг в теме это ведь не рабочий?
Подозрительно
У вас случайно не происходит конфликт двух батчей?

0 Спасибо
Аватар пользователя Olegars
2 months 3 недели назад Olegars #

рабочий без незначительных деталей, это для крона нужно

 
    $batch = &batch_get();
    $batch['progressive'] = FALSE;
    batch_process();
0 Спасибо
Аватар пользователя BatKor
2 months 3 недели назад BatKor #

gun-dose Писал выше , конфликт в периодичности? Не закончил работу один крон начинается второй?

0 Спасибо
Аватар пользователя gun_dose
2 months 3 недели назад gun_dose #

Тут ещё специфика самого batch api влияет. Скорее всего крон считает задание выполненным сразу после старта батча.

0 Спасибо
Аватар пользователя Olegars
2 months 3 недели назад Olegars #

крон автоматом не запускается, стоит "никогда", только руками, запускаю, жду, полет нормальный, выдает отчет в журнал. все четко, проходит 25 минут , умер, тихо без ошибок

0 Спасибо
Аватар пользователя BatKor
2 months 3 недели назад BatKor #

А если в саму итерацию витчдоком выводить номер шага. И хоть как то отловить?

0 Спасибо
Аватар пользователя Olegars
2 months 3 недели назад Olegars #

вывожу, "Загружено 25200 строк" - в этом месте вырубается(шаг 200 строк), а вот в текущий момент фигачит через форму: Now processing node 46200 of 275649

0 Спасибо
Аватар пользователя Olegars
2 months 3 недели назад Olegars #

провел эксперимент на локальном компе, он тормознее чем сервер, вырубилось на 15800, правда и по времени меньше отработал, 19 минут... через форму опять же работает.
Что же за фигня такая.....

0 Спасибо
Аватар пользователя bsyomov
2 months 3 недели назад bsyomov #

По мне, такие вещи на порядок разумнее, проще и эффективнее, запускать как drush command вне контекста веб сервера, без всяких батчей, и ограничения времени выполнения.

0 Спасибо
Аватар пользователя gun_dose
2 months 2 недели назад gun_dose #

У батча есть ограничение по времени?

0 Спасибо
Аватар пользователя bsyomov
2 months 2 недели назад bsyomov #

Ограничение есть не у батча, а у процесса php в контексте веб сервера. И для преодоления этой проблемы и делается батч.
У батча есть излишняя сложность на ровном месте, которая не нужна для таких процессов как мы обсуждаем, не более того.
Если бы речь шла не о кроне, а о необходимости показать процесс выполнения задания пользователю в веб интерфейсе, батч был бы уместен. Здесь - нет.

0 Спасибо
Аватар пользователя Olegars
2 months 2 недели назад Olegars #
bsyomov написал:
По мне, такие вещи на порядок разумнее, проще и эффективнее, запускать как drush command вне контекста веб сервера, без всяких батчей, и ограничения времени выполнения.

я тут не очень в теме, надо покопать

gun_dose написал:
У батча есть ограничение по времени?

а где там ограничение времени? Я не в курсе.
Вообще смотрю в сторону queue

0 Спасибо
Аватар пользователя Olegars
2 months 2 недели назад Olegars #

не на ту кнопку нажал

0 Спасибо
Аватар пользователя Olegars
2 months 2 недели назад Olegars #
bsyomov написал:
Ограничение есть не у батча, а у процесса php в контексте веб сервера. И для преодоления этой проблемы и делается батч.

У батча есть излишняя сложность на ровном месте, которая не нужна для таких процессов как мы обсуждаем, не более того.

Если бы речь шла не о кроне, а о необходимости показать процесс выполнения задания пользователю в веб интерфейсе, батч был бы уместен. Здесь - нет.

да я это уже понял углубясь в вопрос, поэтому собрался ковырять queue, а вот насчет drush даже не задумывался, после вашей наводки буду смотреть

0 Спасибо
Аватар пользователя Olegars
2 months 2 недели назад Olegars #

bsyomov, благодарю за ценную подсказку, drush просто крут.

0 Спасибо