Перейти к содержанию

Рекомендуемые сообщения

OC-Store: Cron


OC-Store: Cron


Реализация крона в Opencart 2.x для запуска контроллеров в папке admin.

https://github.com/sergeypechenyuk/opencart-cron


  • Добавил
  • Добавлено
    03.03.2016
  • Категория
  • Системные требования
  • Сайт разработчика
  • Старая цена
  • Метод активации
  • Ioncube Loader
  • OpenCart
  • ocStore
  • OpenCart.Pro, ocShop

 

  • +1 2

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

или я не понял как все работает или немного странная реализация. 
я могу создать кучу заданий внеся их все в admin/cron_tasks.php, их может быть и 1 и 2 и 3 и 50, правильно? Очень хорошо, НО для того, чтобы все работало мне ведь нужно также прописать на сервере в крон вызов admin/cron.php, который запустит все задания, правильно? Но с каким интервалом его добавлять? С минимальным в 1 минуту? Ведь если я добавлю  этот скрипт с интервалом в напр. час, то будут ли выполняться скрипты в cron_tasks.php у которых интервал напр. 5 минут? Но если и будут то этот не правильно, так выполняться они должны не через час, а через 5 минут. А если я добавлю интервал в 1 минуту то этот скрипт будет выполняться каждую минуту создавая лишнюю нагрузку, так как каждый раз грузится весь движок, подключается база итд. 

+ получается что интервал выполнения приходится задавать 2 раза что имхо не правильно, так как можно запутаться и что-то пропустить.  

Мне напр. было бы намного проще прописать интервал вызова скрипта по крону 1 раз в настройках крона на сервере, после чего бы этот скрипт вызывался когда нужно. И для каждого нового скрипта прописывать свой интервал на сервере. 

Интервалы в самом модуле можно добавлять например для эмуляции крона, то есть для случаев, когда напр. у пользователя нету возможности или умения/желания настроить крон на сервере, тогда можно это эмулировать и вызывать скрипт крона напр. при каждом заходе пользователя на сайт и этот скрипт уже по своим интервалам бы проверял нужно ли что-то запускать, какие-то скрипты, прописанные в его задании с интервалами. 

 

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

но это все мое личное имхо :)

  • +1 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если честно, то не очень понимаю паники по поводу загрузки скриптов движка, по Вашим словам в момент запуска данного скрипта сервер просто проседает под натиском всяких инклудов php скриптов и подключения к БД (без запросов). Я Вам больше скажу, загрузка пользователем той же самой главной страницы ИМ дает нагрузку в несколько раз больше на БД, а также подключаемых PHP скриптов, чем загрузка этого скрипта крона. 

 

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

 

Посмотрел load average на сервере при запущенном каждую минуту задаче и без нее, нагрузка на ЦП не изменилась, на БД тоже. В общем паника на ровном месте если честно :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

Мне кажется, что это не правильно, если вам кажется что правильно - это ваше право, у каждого может быть свое мнение.  

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

Для каждой обработки, которую надо будет ставить на крон сервера, надо создавать отдельный PHP-файл, который, насколько я понимаю будет "грузить весь движок", чтобы выполнить ту или иную функцию или же писать свой костыль уже без движка, который будет на нативном PHP и иметь свое подключение к БД не через функционал движка. Вроде я правильно уловил мысль?

 

Потом такая обработка будет не одна, а будет их 2 или 3, а может все 50? Для каждой обработки свой PHP файл для выполнения той или иной задачи + 50 задач в кроне на сайте (это только для одного сайта). Если, например, десяток задач запускаются раз в минуту, то надо "грузить весь движок" десять раз.

 

Не спорю что мой модуль - велосипед, но у этого велосипеда свои прелести как для простого юзера, так и для других разработчиков, которым нужен крон. А вот теперь возьмите описание любого модуля который использует крон и прикиньтеся на полчаса простым юзером, который ставит opencart с трудом в течении нескольких часов. Боюсь Вам сложно будет в первые разы настраивать крон, да потом приспособитесь, но в начале будет трудно. А тут настроил единожды и потом разрабы модулей используют его в своей работе, достаточно написать одну строчку модификации, чтобы добавить свое задание крона в работу

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если речь идет о простых юзерах, то добавьте в описание мин.информацию про то что не все так просто, и нужно для начала  разобраться с /etc/crontab

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для каждой обработки, которую надо будет ставить на крон сервера, надо создавать отдельный PHP-файл, который, насколько я понимаю будет "грузить весь движок", чтобы выполнить ту или иную функцию или же писать свой костыль уже без движка, который будет на нативном PHP и иметь свое подключение к БД не через функционал движка. Вроде я правильно уловил мысль?

Нет. Вас спросили, как активизируется "ваш крон". И если средствами операционки, то с какой частотой надо настроить вызов вашего "php-крона", чтобы он имел возможность обрабатывать все возможные комбинации указанной частоты вызовов.

Для прояснения картины, что именно беспокоит @sv2109 - посмотрите, сколько занимает демон cron (подскажу: меньше 40 килобайт), из которых обработчик прерываний, который дёргается регулярно для проверки наступления условий, занимает обычно вообще копейки (единицы или десятки байт машинного кода, исполняемые за совсем небольшое количество тактов). Чтобы отработал php-крон, апач должен форкнуть в памяти процесс апача (хрен знает сколько кБ, если не МБ), который подгрузит интерпретатор PHP (вторые ХЗСкБ/МБ), чтобы подгрузить Ваш скрипт килобайт в 20, проинтерпретирует его, после чего исполнит, дёрнув по пути базу, затем освободит всю эту память.

И собственно, вопрос, который задавался @sv2109 - с какой частотой Вы рекомендуете/планируете всю эту кухню активировать? Что рекомендуете чайникам прописать в крон для вызова "php-крона"?

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

  • +1 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Этот модуль выставляет банеры, товары на скидку и тд?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Нет... для этого вам нужно писать обработчик и прописывать его в настройках модуля.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Его можно использовать для обновления товаров путем запуска модуля "export import .xlsx" с передачей файла для импорта?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
В 06.03.2016 в 12:23, sv2109 сказал:

или я не понял как все работает или немного странная реализация. 
я могу создать кучу заданий внеся их все в admin/cron_tasks.php, их может быть и 1 и 2 и 3 и 50, правильно? Очень хорошо, НО для того, чтобы все работало мне ведь нужно также прописать на сервере в крон вызов admin/cron.php, который запустит все задания, правильно? Но с каким интервалом его добавлять? С минимальным в 1 минуту? Ведь если я добавлю  этот скрипт с интервалом в напр. час, то будут ли выполняться скрипты в cron_tasks.php у которых интервал напр. 5 минут? Но если и будут то этот не правильно, так выполняться они должны не через час, а через 5 минут. А если я добавлю интервал в 1 минуту то этот скрипт будет выполняться каждую минуту создавая лишнюю нагрузку, так как каждый раз грузится весь движок, подключается база итд. 

+ получается что интервал выполнения приходится задавать 2 раза что имхо не правильно, так как можно запутаться и что-то пропустить.  

Мне напр. было бы намного проще прописать интервал вызова скрипта по крону 1 раз в настройках крона на сервере, после чего бы этот скрипт вызывался когда нужно. И для каждого нового скрипта прописывать свой интервал на сервере. 

Интервалы в самом модуле можно добавлять например для эмуляции крона, то есть для случаев, когда напр. у пользователя нету возможности или умения/желания настроить крон на сервере, тогда можно это эмулировать и вызывать скрипт крона напр. при каждом заходе пользователя на сайт и этот скрипт уже по своим интервалам бы проверял нужно ли что-то запускать, какие-то скрипты, прописанные в его задании с интервалами. 

 

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

но это все мое личное имхо :)

 

Возможно ли прописать временной запуск не на сервере, а в самом opencart?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

отличное дополнение, автору большущее спасибо! поставил на опенкарт.про 2.3. (для 2.3. автор дал другой релиз, тот что в раздаче для версий ниже 2.3.),

 

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

date_default_timezone_set('Europe/Kiev');

так как работало только при всех *.

 

В остальном очень хорошее приложение автору еще раз большое спасибо!

Изменено пользователем cherkas

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

есть вопрос к автору, будет ли подхватывать запуск по крону изменения в модулях которые сделаны через ocmod?

 

т.е. скажем есть изменение в модуле yml выгрузки, эти изменения сделаны через ocmod, при запуске выгрузки через крон будет работать оригинальный фаил или модифицированный?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
В 30.12.2017 в 03:48, cherkas сказал:

отличное дополнение, автору большущее спасибо! поставил на опенкарт.про 2.3. (для 2.3. автор дал другой релиз, тот что в раздаче для версий ниже 2.3.),

 

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


date_default_timezone_set('Europe/Kiev');

так как работало только при всех *.

 

В остальном очень хорошее приложение автору еще раз большое спасибо!

Можно ли как то получить релиз для ocStore 2.3.0.2.3 ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Добрый день.

 

Подскажите как правильно внести параметры настройки cron_tasks.php

 чтобы запуск обработки прайс-листа происходил с сервера (из папки admin/uploads) нужно запускать ссылку .../admin/index.php?route=catalog/suppler/load&token=4LaYiIjLWREH7aD7tTOgvQMDbh5qKvXQ&form_id=1&page=1

При записи в cron_tasks.php нужно предоставить ссылку.

 

$cron->call(
    "http://.../admin/index.php?route=catalog/suppler", -> это получается ссылка на запуск модуля
    array (
        "minute" => "*/3", 
        "hour" => "0-5", 
        "day" => "*", 
        "dayofweek" => "7", 
        "dayofmonth" => "*"
    ),
    array(
        "load" => "form_id=1&page=1";  -> это параметр запуска модуля
    )
);

Правильно ?

или прописывать всё в ссылке .../admin/index.php?route=catalog/suppler/load&form_id=1&page=1

а в параметрах что писать ? и можно ли прописать пустое место ? типа : "param" => ''';

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Похожий контент

    • От zemleroi
      500.00 руб
      Скачать/Купить дополнение


      Cron-менеджер
      модуль "Cron-менеджер" - облегчение рутинных работ администраторов и менеджеров
      автор zemleroi
      Работает на Opencart 1.5.x
      Возможно использование с:
      1. [WebMe] Review Reminder
      2. Расширение возможности стандартного модуля [WebMe] Review Reminder
      3. АВТО ЧПУ 1.0
      4. Обновление курсов валют с ЦБРФ
      5. Автоматическое отслеживание доставок СДЭК
      6. Автоматическое отслеживание почтовых отправлений Почты России
      7. модуль "Бонус лотерея" для Opencart 1.5.x
      8. Напоминание для менеджера о заказе по Email
      Описание:
      Модуль представляет собой планировщик часто повторяющихся заданий, созданный на базе системы управления Opencart.
      Требования к модулю:
      1. Opencart 1.5.x
      2. PHP 5.3.х и выше
      3. доступ к shell-оболочке
      4. услуга хостинга планировщик заданий
      Установка:
      1. Скопируйте файлы из папки upload на хостинг (файлы ничего не заменяют)
      2. Установить модуль из админ-панели
      3. Выставите права 777 на папку cron/cronmanager
      4. Узнайте, поддерживает ли ваш хостиг Cron, выбрав в настройках модуля соответствующий пункт
      5. Спланируйте задания и сохраните.
      Обновление:
      1. Сделайте бекапы файлов и БД.
      2. Скопируйте файлы из папки upload на хостинг соглашаясь на замену (происходит замена своих файлов модуля, если были изменения в модуле не включенных в новую версию - данные изменения потеряются. Сделайте бекапы файлов)
      3. Зайдите в админ-панель модуля, выставите настройки и сохраните
      Возможности:
      1. Полностью интегрирован с opencart
      2. Возможность выставления периодических заданий
      3. Возможность выставления выполнения задания на определенную дату и время
      4. Проверка поддержки cron хостингом
      5. Комплект Пред-установок:
      --для опытных пользователей
      а) Бекап БД
      б) Очистка лога ошибок
      в) Очистка КЕША
      --для менеджеров
      г) Обновление валют
      д) Отправка отчетов: по продажам, по возвратам, по доставке, по купонам, по купленным товарам
      --для опытных администраторов
      е) пред установка для выполнения иных задач на php, perl
      ж) пред установка для выполнения удаленных задач при помощи wget, curl
      --для ГУРУ администраторов
      з) установка любого задания с произвольными параметрами
      мини-FAQ по крону:
      1. cron (крон) - это планировщик задач, для периодического выполнения заданий в определённое время.
      2. Для добавления в cron нужно
      а) зайти в cron хостинга ( у каждого он по разному называется, но принцип работы один см. п.1)
      в) создать новое задание: периодичность выполнения не чаще и больше 1 раза в минуту :)
      г) вставить в это задание код на выполнение, скопированный в п. 2.а. В большинстве своем должно получится что-то вроде
      */1 * * * <путь к исполняющему процессу> <параметры исполнения>
      Админка:
      http://new.mozgo-prav.ru/admin/index.php?route=module/cronmanager
      login: demo
      pass: demo
      Отблагодарить
      Яндекс.Деньги 4100148675738
      Добавил zemleroi Добавлено 31.08.2014 Категория Модули  
    • От hervam
      Такой вопрос
      Скрипт может генерировать несколько команд
      Команда 1
      Команда 2
      Команда 3
       
       
      Можно ли эти команды добавлять в планировщик заданий без входа в CPANEL и добавления команд?
    • От SergeyPechenyuk
      Реализация крона в Opencart 2.x для запуска контроллеров в папке admin.
      https://github.com/sergeypechenyuk/opencart-cron
    • От zemleroi
      модуль "Cron-менеджер" - облегчение рутинных работ администраторов и менеджеров
      автор zemleroi
      Работает на Opencart 1.5.x
      Возможно использование с:
      1. [WebMe] Review Reminder
      2. Расширение возможности стандартного модуля [WebMe] Review Reminder
      3. АВТО ЧПУ 1.0
      4. Обновление курсов валют с ЦБРФ
      5. Автоматическое отслеживание доставок СДЭК
      6. Автоматическое отслеживание почтовых отправлений Почты России
      7. модуль "Бонус лотерея" для Opencart 1.5.x
      8. Напоминание для менеджера о заказе по Email
      Описание:
      Модуль представляет собой планировщик часто повторяющихся заданий, созданный на базе системы управления Opencart.
      Требования к модулю:
      1. Opencart 1.5.x
      2. PHP 5.3.х и выше
      3. доступ к shell-оболочке
      4. услуга хостинга планировщик заданий
      Установка:
      1. Скопируйте файлы из папки upload на хостинг (файлы ничего не заменяют)
      2. Установить модуль из админ-панели
      3. Выставите права 777 на папку cron/cronmanager
      4. Узнайте, поддерживает ли ваш хостиг Cron, выбрав в настройках модуля соответствующий пункт
      5. Спланируйте задания и сохраните.
      Обновление:
      1. Сделайте бекапы файлов и БД.
      2. Скопируйте файлы из папки upload на хостинг соглашаясь на замену (происходит замена своих файлов модуля, если были изменения в модуле не включенных в новую версию - данные изменения потеряются. Сделайте бекапы файлов)
      3. Зайдите в админ-панель модуля, выставите настройки и сохраните
      Возможности:
      1. Полностью интегрирован с opencart
      2. Возможность выставления периодических заданий
      3. Возможность выставления выполнения задания на определенную дату и время
      4. Проверка поддержки cron хостингом
      5. Комплект Пред-установок:
      --для опытных пользователей
      а) Бекап БД
      б) Очистка лога ошибок
      в) Очистка КЕША
      --для менеджеров
      г) Обновление валют
      д) Отправка отчетов: по продажам, по возвратам, по доставке, по купонам, по купленным товарам
      --для опытных администраторов
      е) пред установка для выполнения иных задач на php, perl
      ж) пред установка для выполнения удаленных задач при помощи wget, curl
      --для ГУРУ администраторов
      з) установка любого задания с произвольными параметрами
      мини-FAQ по крону:
      1. cron (крон) - это планировщик задач, для периодического выполнения заданий в определённое время.
      2. Для добавления в cron нужно
      а) зайти в cron хостинга ( у каждого он по разному называется, но принцип работы один см. п.1)
      в) создать новое задание: периодичность выполнения не чаще и больше 1 раза в минуту :)
      г) вставить в это задание код на выполнение, скопированный в п. 2.а. В большинстве своем должно получится что-то вроде
      */1 * * * <путь к исполняющему процессу> <параметры исполнения>
      Админка:
      http://new.mozgo-prav.ru/admin/index.php?route=module/cronmanager
      login: demo
      pass: demo
      Отблагодарить
      Яндекс.Деньги 4100148675738
  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.