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


Запуск строненнего скрипта в cron


Сообщений в теме: 10

#1 alexols

    Активный участник

  • Пользователи
  • PipPipPip
  • 48 сообщений

Отправлено 19 Апрель 2016 - 13:54

Коллеги приветству.
Подскажите как правильно настроить запуск в cron стороннего скрипта , который к примеру формирует csv файл и качает картинки ?

#2 alexols

    Активный участник

  • Пользователи
  • PipPipPip
  • 48 сообщений

Отправлено 19 Апрель 2016 - 13:56

Я могу в поле команда вставить php код всего скрипта ?
http://prntscr.com/au4ae4

#3 andibrag

    Прежде, чем задать вопрос, продумайте свое решение.

  • Активный пользователь
  • PipPipPip
  • 1 356 сообщений
  • Пол:Мужчина
  • Город:Санкт-Петербург

Отправлено 19 Апрель 2016 - 15:49

Просмотр сообщенияalexols (19 Апрель 2016 - 13:56) писал:

Я могу в поле команда вставить php код всего скрипта ?
Для того и сделано это поле. Все по аналогии с вычислением.

Творческая группа "ТАВР".

www.TAVR.pro Художественная ковка, металлоконструкции.

www.СтолМет.рф Складные столы, стулья и системы для их хранения


#4 alexols

    Активный участник

  • Пользователи
  • PipPipPip
  • 48 сообщений

Отправлено 19 Апрель 2016 - 15:52

Да с этим все на текущий момент разобрался. Пытаюсь теперь прикрутить импорт из csv. Пишу в команде import_data("Добавить объект","Импорт",$_SERVER['DOCUMENT_ROOT']."AP/import.csv");
пока не работает файлы есть.

#5 alexols

    Активный участник

  • Пользователи
  • PipPipPip
  • 48 сообщений

Отправлено 19 Апрель 2016 - 16:43

Все работает все живет. А можно как то обойти системное ограничение времени выполнения 2 мин. ?

#6 Александр Пономарев

    Активный участник

  • Пользователи
  • PipPipPip
  • 435 сообщений
  • Пол:Мужчина
  • Город:Таганрог

Отправлено 19 Апрель 2016 - 17:00

Не пишет, что функция не найдена?
import_data - это, видимо, встроенная в КБ функция, она в КРОНе работать не будет.
Скорее всего вам нужно использовать fgetcsv http://php.net/manua...ion.fgetcsv.php

#7 alexols

    Активный участник

  • Пользователи
  • PipPipPip
  • 48 сообщений

Отправлено 19 Апрель 2016 - 17:07

Нет все нормально в доке про эту функцию написано http://prntscr.com/au6id5
У меня вопрос системным ограничением времени выполнения, причем мне не постоянно надо у меня разовый импорт может занять некоторое время потом уже все быстро будет происходить.
Или есть еще какой то вариант запуска php скрипта не через cron ?

#8 Timur

    Активный участник

  • Техподдержка ООО "КБ"
  • PipPipPip
  • 854 сообщений
  • Пол:Мужчина

Отправлено 19 Апрель 2016 - 17:08

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

#9 alexols

    Активный участник

  • Пользователи
  • PipPipPip
  • 48 сообщений

Отправлено 20 Апрель 2016 - 17:43

У меня два скрипта в cron один использует import_data, судя по вашей информации мне там боятся нечего со стороны ограничений по времени.
Второй скрипт качает картинки как там защитится от времени выполнения ?

#10 Timur

    Активный участник

  • Техподдержка ООО "КБ"
  • PipPipPip
  • 854 сообщений
  • Пол:Мужчина

Отправлено 12 Май 2016 - 10:40

<?php
// Задача: необходимо несколько раз в цикле произвести некое действие, при этом время выполнения скрипта может выйти за предел ограничения по времени.

// задаем время начала и максимальное время выполнения
$start_time = time();
$max_exec_time = ini_get("max_execution_time");
if ($max_exec_time > 180) $max_exec_time = 180;
if ($max_exec_time < 30) $max_exec_time = 30;

// достаем текущее значение переменной цикла из БД, для того что продолжить задачу с последнего места, если она была перезапущена
// если же задача запущена первый раз, создаем запись в БД для последующего хранения
$i = $config['my_var_i'];
if ($i == 0) sql_insert(CONFIG_TABLE, array('name' => 'my_var_i', 'value' => $i));

// запускаем цикл, например на 300 итераций
// если задача перезапущена, цикл продолжится с последней итерации
while ($i < 300) {
    
    // для примера, просто выводим счетчик текущей итерации в лог задачи крон, каждую секунду
    // этот фрагмент необходимо заменить на свою задачу
    echo "$i\n";
    sleep(1);
    $i++;
    
    // проверяем, не приблизилось ли время прерывания (на всякий случай задана фора 20 секунд)
    if (time() - $start_time > $max_exec_time - 20) {
	    // если да - сохраняем переменную цикла в БД, задаем системную переменную для перезапуска задачи cron и выходим из цикла
	    sql_update(CONFIG_TABLE, array('value' => $i), "name='my_var_i'");
	    $cron_restart = 1;
	    break;
    }
}
// если все итерации были выполнены, удаляем переменную в БД
if ($i == 300) sql_delete(CONFIG_TABLE, "name='my_var_i'");

Вот пример кода. В дальнейшем, он будет размещен в документации на нашем сайте.

#11 alexols

    Активный участник

  • Пользователи
  • PipPipPip
  • 48 сообщений

Отправлено 12 Май 2016 - 11:46

ооо !!!!
Спасибки !!!!
Здорово !!!!





Количество пользователей, читающих эту тему: 2

0 пользователей, 2 гостей, 0 анонимных