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


Запустить внешний файл из крона


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

#1 plotnikov

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

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

Отправлено 27 Август 2015 - 13:37

Подскажите, как можно запустить выполнение внешнего файла КБ из cron'а КБ?

#2 CbCoder

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

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 27 Август 2015 - 13:54

http://php.net/manua...ion.include.php

#3 plotnikov

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

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

Отправлено 27 Август 2015 - 14:02

Что-то не подумал об этом, спасибо.

#4 andibrag

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

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

Отправлено 07 Август 2023 - 22:54

Пытался запустить из крон дополнительное действие.
Ни прямые пути, ни относительные, ни указание пути через $_SERVER['DOCUMENT_ROOT'] результата не дает.
В чем может быть проблема?

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

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

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


#5 CbCoder

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

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 10 Август 2023 - 12:53

А каким образом запускали? Вариант с include как со внешними файлами в примере выше, тут не прокатит, т.к. код доп.действия лежит в БД, а не в файле.

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

#6 andibrag

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

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

Отправлено 11 Август 2023 - 15:09

Полагаю, где лежит сам код не важно, поскольку запускаемый файл, который лежит в папке cb/user_button.php, подключится к базе и выполнит его. Изначально была проблема с передаваемыми в строке файла переменными. Оказывается (ранее это не знал) передать get нельзя через include или require, поэтому отправил через массив GET[] и они вроде прошли. Но require показал следующую ошибку - дублирование функции. Не помню точно, что-то с логами связано. Использование require_once также не решает проблему и это обойти мне уже не получится. Пробовал через curl, в надежде, что файл вернет значение - не работает.
Доп. действие написано без привязки к конкретной записи. Используются функции для прямой работы с записями. Если код прописать прямо в редактор cron - всё работает. Была мысль в крон указывать просто отдельные допдействия, каждое из которых выполняет определенный процесс. Так проще работать с кодом. Сейчас приходится все прописать в код крон и, как результат, он занимает десяток экранов. Крайне не удобно.
Если бы у вас были проверки существования функции, то include скорее всего сработал бы.
Может подскажете варианты?

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

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

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


#7 CbCoder

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

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 11 Август 2023 - 15:25

Не подойдет тут никак вариант с include по той причине что скрипт user_button.php не предназначен для включения его в другие файлы. Это полноценный скрипт для самостоятельно запуска в браузере, поэтому там и происходит дублирование всего того что уже подключено при вызове задания крон, включая определение функций и т.д. И проверка функций тут погоды не сделает.

Как вариант можно скопировать код доп.действия в вычисление и поставить событие "по расписанию", тогда задание крон создастся автоматически, но этот вариант подойдет если вам нужно только одно вычисление запускать. Если нужно именно включить вызов кода вычисления в произвольный код крона, то можно использовать следующий код:

$calc = sql_select_array(CALC_TABLE, 'id = 111'); // 111 - id вычисления
$calc['link_fields'] = unserialize($calc['link_fields']);
$table_id = $calc['table_id'];
$table = get_table($table_id);
$table_fields = get_table_fields($table);
$event = [
    'type' => 'cron',
    'table_id' => $table_id,
    'changed' => [],
];
$line = data_select_array($table_id, 'id = 222'); // 222 - id записи по которой надо запустить вычисление
calc_line($table, $line, $calc, $event);


#8 andibrag

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

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

Отправлено 11 Август 2023 - 15:29

Спасибо. Попробуем. Думаю может подойти такой вариант.

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

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

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


#9 andibrag

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

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

Отправлено 11 Август 2023 - 15:50

Вы меня натолкнули на мысль. Если аналогичный способ использовать для допдействия, только не по id его находить в таблице, а по name
$calc = sql_select_array(CALC_TABLE, '`name` = "Button 1200"');
Сработает?
Далее определить id и запустить через run_calc()

Сообщение отредактировал andibrag: 11 Август 2023 - 15:54

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

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

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


#10 CbCoder

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

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 11 Август 2023 - 16:01

Цитата

Сработает?

Да, для доп.действий по идее тоже должно сработать.

Цитата

Далее определить id и запустить через run_calc()

Только не через run_calc скорее всего, а через calc_line, я там редактировал свое сообщение выше. Поторопился я с run_calc в том плане что run_calc запускает вычисление по всей таблице, а вариант выше с calc_line позволяет запустить вычисление по конкретным нужным вам записям. Но если вас устроит запуск по всей таблице сразу, то можно и run_calc запустить, он сделает тоже самое.

#11 andibrag

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

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

Отправлено 11 Август 2023 - 16:08

Нам подойдет и run_calc. Привязки к записи нет.
Доп.действие выполняет синхронизацию.
Собирает данные, например, со всех маркетплейсах о заказах и вносит их в базу, далее, отправляет данные о товарах в Мой склад и синхронизирует данные о товарах. Потом раздает остатки на все маркетплейсы. Т.е. ваша клиентская база оказалась уникальным инструментом для синхронизации и учета.
Если вариант запуска допдействия окажется рабочим - будет очень удобно. Поскольку каждая синхронизация с маркетом через API - это куча кода и когда он весь в одном месте - это головняк.
Вам бы сделать свои модули для таких синхронизаций в движке - цены бы не было для обычных пользователей.
В любом случае спасибо за программу!

Сообщение отредактировал andibrag: 11 Август 2023 - 16:10

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

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

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






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

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