Перейти к содержимому


Публикации Givik

14 публикаций создано Givik (учитываются публикации только с 21-Апрель 23)


#25219 import_data + cron - как происходит перезапуск скрипта?

Отправлено от Givik в 19 Июль 2014 - 14:20 in Как это сделать

К сожалению, скрипты крона нельзя выстраивать в цепочки (выполнился скрипт А, затем скрипт В и т.д.). А данные связаны, т.е. обязательно нужно, чтобы таблица А обновилась перед обновлением таблицы В. Поэтому и пишу в одном скрипте.
Какие еще есть варианты решения?



#25213 import_data + cron - как происходит перезапуск скрипта?

Отправлено от Givik в 19 Июль 2014 - 00:23 in Как это сделать

Хорошо, переделал скрипт. Теперь сначала выполняются все запросы к сторонней системе, потом стартуют все импорты в КБ:

// Запускаем запросы, экспортирующие данные из Kayako в CSV-файлы
echo '  Exporting Users from Kayako...'.PHP_EOL; 
if ($users_result = mysqli_query($kayako_conn, $users_query)) {
  echo '  Users exported OK'.PHP_EOL;
} else {
  echo '  Users export error: '.mysqli_error($kayako_conn).PHP_EOL;
}
echo '  Exporting Tickets from Kayako...'.PHP_EOL; 
if ($tickets_result = mysqli_query($kayako_conn, $tickets_query)) {
  echo '   Tickets exported OK'.PHP_EOL;
} else {
  echo '  Tickets export error: '.mysqli_error($kayako_conn).PHP_EOL;
}

// Запускаем импорт из файлов в КБ
if ($users_result) {
  echo '  Importing Users to CB...'.PHP_EOL;
  import_data("Пользователи", "kayako", $users_file_name);
  echo '   Users imported OK'.PHP_EOL;
}
if ($tickets_result) {
  echo '  Importing Tickets to CB...'.PHP_EOL;
  import_data('Заказы файлов', 'kayako tickets', $tickets_file_name); // ВОТ ТУТ ИМПОРТИРУЕТСЯ БОЛЬШОЙ ФАЙЛ!!!
  echo '   Tickets imported OK'.PHP_EOL;
}

После запуска в логах вижу следующее:
Exporting Users from Kayako...
Users exported OK
Exporting Tickets from Kayako...
Tickets exported OK
Importing Users to CB...
Done. 1 records inserted, 195 records updated. Users imported OK
Importing Tickets to CB...
23% Tickets imported OK

ну и далее все последующие "echo" по скрипту

Но вот что самое интересное:
1. В логах отсутствует запись типа "X records inserted, Y records updated"
2. В базе КБ вижу, что обновились НЕ ВСЕ записи, которые были в импортируемом файле
3. Запускаю импорт из этого же файла вручную (выбираю вручную тот же шаблон), проверяю в КБ - теперь ВСЕ записи обновлены. И импорт выполнялся ощутимо дольше, чем через скрипт крона.

Делаю вывод - import_data в скрипте прервалась на 23%, но при автоматическом перезапуске скрипта не возобновилась. Как такое возможно?



#25195 import_data + cron - как происходит перезапуск скрипта?

Отправлено от Givik в 18 Июль 2014 - 12:28 in Как это сделать

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

В нем есть несколько строчек примерно такого вида:

$some_query = "SELECT что-то INTO OUTFILE ... FROM ..."; // результат запроса к другой базе сохраняется в файл $export_file_name
if ($export_result = mysqli_query($another_db_conn, $some_query)) {
  echo '   Exported okay, starting import to CB'.PHP_EOL;
  import_data('Таблица в КБ', 'Шаблон импорта', $export_file_name); // объем большой!
  echo '   Imported to CB okay'.PHP_EOL;
}

Если результирующий файл небольшого объема - import_data успевает отработать за один раз. В логах вижу записи:
2014-07-18 03:01:09 -
Exported okay, starting import to CB
Done. 0 records inserted, 194 records updated. Imported to CB okay


Но если файл получается большой, то проиходят странности. Во-первых, ни одно "echo" не попадает в лог, во-вторых, в логе я вижу странную запись типа (скрипт по крону стартует каждый час в 00 минут):
2014-07-18 04:36:00 - TERMINATED TASK FROM 2014-07-18 04:02:20 - и все!!!

По логике работы скрипта, я вижу, что все, что после import_data - не выполнилось (не выполнились другие запросы, не создались файлы).

Судя по документации, если скрипт не укладывается в отведенное время, он перезапускается. Но как это происходит? И почему падает выполнение import_data?



#24535 Очень медленно выполняется экспорт таблицы

Отправлено от Givik в 18 Июнь 2014 - 11:31 in Как это сделать

Если пришлю дамп таблицы - сможете проверить? Либо CSV-выгрузку.



#24532 Очень медленно выполняется экспорт таблицы

Отправлено от Givik в 18 Июнь 2014 - 11:26 in Как это сделать

Есть одно вычисление, условия - "при сохранении" и "при импорте". На всякий случай перед экспортом я его специально отключил (снял галку).
Полей связи в этой таблице тоже нет. Есть другие таблицы, которые ссылаются на эту.



#24493 Очень медленно выполняется экспорт таблицы

Отправлено от Givik в 18 Июнь 2014 - 07:04 in Как это сделать

Таблица - каталог марок и моделей автомобилей, порядка 15000 записей, около 20 полей. Экспорт всех значений (без фильтра) в CSV занимает, наверное, около получаса. Почему так долго? На сервере запрос SELECT * INTO OUTFILE отрабатывается за долю секунды.
Что проверить?



#24446 Ошибка выполнения import_data в cron

Отправлено от Givik в 16 Июнь 2014 - 21:15 in Как это сделать

Опытным путем выяснилось, что import_data в скрипте крона работает на всех остальных таблицах, кроме таблицы "Пользователи". Эта таблица у меня, как и в демо-конфигурации, связана с пользователями. Соответственно, к ней были автоматически добавлены 4 стандартных вычисления. Последнее как раз должно выполняться при импорте данных. Пробуем его отключить...
Прикрепленное изображение: 2014-06-17_000735 user calc.jpg

...и все работает!

Ставим галочку обратно - и скрипт крона вылетает с той же ошибкой.

Вот код этого стандартного вычисления.
global $table;
if ($user['group_id']!=1)
{
  if ($user['sub_admin']==1)
  {
	if ($line['Группа доступа']==1)
	{
	  if ($table['user_table_fields']['group_id'])
	  {
		data_update($event['table_id'], array("f".$table['user_table_fields']['group_id']=>0), "id=".$event['line_id']);
	  }
	}
  }
}



#24415 Ошибка выполнения import_data в cron

Отправлено от Givik в 16 Июнь 2014 - 13:21 in Как это сделать

Просмотр сообщенияCbCoder (14 Июнь 2014 - 14:44) писал:

Значит необходимо тестировать вашу конфигурацию и смотреть что там за ошибка такая.
Замечательно. Как тестировать? Где смотреть логи?
С учетом того, что техподдержка забила на мое обращение болт и просто не отвечает на два последних письма.



#24358 Ошибка выполнения import_data в cron

Отправлено от Givik в 13 Июнь 2014 - 22:34 in Как это сделать

Выяснилась одна особенность. Перед тем, как вылететь с ошибкой, import_data все-таки обновляет одну запись в таблице - первую строчку в CSV-файле (не считая заголовка). А вот до обработки второй строки дело уже не доходит.



#24290 Ошибка выполнения import_data в cron

Отправлено от Givik в 10 Июнь 2014 - 18:04 in Как это сделать

Просмотр сообщенияCbCoder (07 Июнь 2014 - 14:15) писал:

Сообщите техподдержке об этом.
Уже. Такое ощущение, что у техподдержки лимит - не более одного ответа в день.
Вопрос так и не решен.



#24209 Ошибка выполнения import_data в cron

Отправлено от Givik в 06 Июнь 2014 - 20:31 in Как это сделать

Создал новый шаблон с нуля, поменял строку скрипта - вставил имя нового шаблона. Та же ошибка. Запускаю импорт вручную по этому шаблону - все работает.



#24139 Ошибка выполнения import_data в cron

Отправлено от Givik в 04 Июнь 2014 - 17:54 in Как это сделать

Да, файл система точно видит, т.к. если что-то изменить в имени файла или в пути - появляется нормальное сообщение об ошибке "File not found".

Имя шаблона тоже верное, при попытке что-то заменить появляется сообщение типа "Template not found" или вроде того.

Таблица с таким именем тоже 100% существует, при попытке сознательно накосячить в имени таблицы - "Table not found".

Кодировка CSV-файла - UTF-8.



#24138 Ошибка выполнения import_data в cron

Отправлено от Givik в 04 Июнь 2014 - 17:48 in Как это сделать

Пытаюсь настроить в кроне периодический импорт данных из CSV-файла.

Шаблон настроен, вручную из этого же файла по этому же шаблону импорт проходит прекрасно.

Пишем в скрипте крона одну строчку (указывается путь к файлу на сервере):
import_data("Пользователи", "my template", "w:/webs/export/users.csv");

Падает с неизвестной ошибкой (см. скриншот).

По рекомендации техподдержки прописываем адрес сервера вместо прямого пути (шарю папку):
import_data("Пользователи", "my template", "//localhost/export/users.csv");

Та же ошибка.

Выкладываю файл на веб, изменяю строку на:
import_data("Пользователи", "my template", "http://адрессайта.ru/users.csv");

Та же самая ошибка.

Что делать?

Прикрепленные изображения

  • Прикрепленное изображение: 2014-06-04_204618 cb error.jpg



#23654 Отображение количества записей в связанных таблицах

Отправлено от Givik в 14 Май 2014 - 23:29 in Предложения по доработке

При открытии какой-либо записи, было бы удобно, если панель ссылок "Связанные таблицы" отображала сразу и количество записей, связанных с данной. Например, как во вложении.

Прикрепленные изображения

  • Прикрепленное изображение: 2014-05-15_022410 clientbase count.jpg