BMC IO DocsBMC IO Docs
IO v6
IO v7
Notes
Docs
IO v6
IO v7
Notes
Docs
  • IO Framework v7

    • О фреймворке
    • Что изменилось в 7 версии
    • IO7 Framework vs Laravel 13 — Сравнение
    • Структура
    • Варианты проектов
    • Доступ к участкам проекта
    • Разворачивание нового проекта
    • Установка проекта
    • Запуск локальной разработки
  • API

    • Обзор API
    • IOCore::call() и IOCore::callAction()
    • Создание API
  • CLI

    • Обзор CLI
    • iocli
    • Кастомные CLI команды
  • Работа с базами данных

    • Обзор работы с базами данных
    • Cron / Планировщик задач (Schedule)
    • Фабрики
    • Миграции
    • Сидеры
    • Query Builder
    • Подключение MinIO
    • Подключение MongoDB
    • Подключение MySQL
    • Подключение PostgreSQL
    • Подключение ProxySQL
    • Подключение RabbitMQ
    • Подключение Redis
  • Логирование

    • Обзор логирования
    • IOEvent - Логирование событий
    • Pinba (PinbaManager) - Профилировщик
  • Модели

    • Обзор моделей
    • CRUD операции
    • Связи моделей
  • Очереди

    • Обзор очередей
    • RabbitMQ
  • Маршруты

    • Обзор маршрутов
    • Определение маршрутов
    • Middleware
  • Сессии

    • Обзор сессий
    • Кроссдоменная SSO
    • JWT авторизация
    • Социальная авторизация
    • OAuth2
    • Keycloak
  • Twig

    • Обзор Twig
    • Формы (FormBuilder)
    • Twig функции
  • Тестирование

    • Обзор тестирования
    • Unit тесты
  • Backend

    • Настройки проекта Conf.php
    • Настройки модуля Module.php
    • Настройки composer
    • Функции фреймворка
    • Вспомогательные функции (Helpers)
    • Глобальные переменные
    • Константы фреймворка
    • Event класс
    • Core класс
    • Route и работа с ними
    • Request и работа с ними
    • Middleware и работа с ними
    • Class и работа с ними
    • Api model и работа с ними
    • Template и работа с ними
    • Мультиязычность и словарь фраз
    • Bin скрипты и работа с ними
    • Cron скрипты и работа с ними
    • $ioSession и работа с сессией
    • $ioHash и работа с кешем
    • $ioXCache и работа с кешем
    • $iodb и работа с базой данных
    • Миграции
  • Frontend

    • Twig шаблонизатор и работа с ним
    • Twig функции
    • Twig фильтры
    • Twig контекст
    • Настройка NPM
    • Сборка Frontend составляющей
    • Обращение к Api через JS
    • Хранилище (store)
    • Навигация в хосте
    • Навигация в микрофронтенде
    • Параметры микрофронтенда
    • Проверка полномочий
  • Tailux UI Компоненты

    • Базовый UI

      • AvatarDot
      • Avatar
      • Badge
      • Button
      • Card
      • ConfirmModal
      • Divider
      • Highlight
      • Tag
    • Загрузка

      • Circlebar
      • Progress
      • Skeleton
      • Spinner
    • Навигация

      • Accordion
      • AccordionButton
      • AccordionHeader
      • AccordionItem
      • AccordionPanel
      • AccordionProvider
      • Pagination
      • PaginationControl
      • PaginationItems
      • PaginationDots
      • PaginationFirst
      • PaginationLast
      • PaginationNext
      • PaginationPrevious
    • Отображение данных

      • Box
      • Collapse
      • ContextualHelp
      • ScrollShadow
      • Timeline
      • TimelineItem
    • Элементы таблиц

      • Table
      • CollapsibleSearch
      • ColumnFilter
      • CopyableCell
      • DateFilter
      • FacetedFilter
      • FilterSelector
      • PaginationSection
      • RadioFilter
      • RangeFilter
      • ResponsiveFilter
      • RoleFilter
      • SelectedRowsActions
      • TableColumnVisibility
      • TableSettings
      • TableSortIcon
    • Элементы форм

      • Checkbox
      • Combobox
      • DatePicker
      • Filepond
      • Input
      • Listbox
      • Radio
      • Range
      • Select
      • StyledSwitch
      • Swap
      • SwapOn
      • SwapOff
      • Switch
      • Textarea
      • TextEditor
      • Upload

Cron / Планировщик задач (Schedule)

Внимание

Данная статья документации написана нейросетью. Возможны некоторые расхождения и неточность информации!

  • Обзор
  • Архитектура
    • Модели данных (IO\Classes)
    • Шаблон задач (IO\Console\ScheduleTemplate)
    • Методы ScheduleTemplate
    • Свойства
  • Таблица cron
  • Таблица cron_work
  • Таблица cron_data
  • CLI команды
  • Расписание
  • Сервис: ScheduleService
  • Пример: DeleteCron

Обзор

IO7 имеет встроенный планировщик cron задач. Задачи определяются в таблице cron и выполняются через php iocli schedule:run.

Архитектура

Модели данных (IO\Classes)

МодельТаблицаОписание
CronJobcronОпределения cron задач
CronWorkcron_workЛоги выполнения
CronDatacron_dataХранилище данных задач

Шаблон задач (IO\Console\ScheduleTemplate)

Базовый класс для cron задач. Наследуется в app/Crons/.

<?php
declare(strict_types=1);

namespace App\Crons;

use IO\Console\ScheduleTemplate;

class CleanUpCron extends ScheduleTemplate
{
    public function cron_ask(): bool
    {
        // Возвращает true если задача должна выполниться
        $this->data_load();
        return true;
    }

    public function cron_do(): void
    {
        // Основная логика
        $this->data['counter'] = ($this->data['counter'] ?? 0) + 1;
        $this->data_save();
    }
}

Методы ScheduleTemplate

МетодОписание
cron_ask(): boolПроверка условий запуска
cron_do(): voidОсновная логика
data_load(): voidЗагрузить данные из cron_data
data_save(): voidСохранить данные в cron_data
terminate()Остановить выполнение
isTerminated(): boolПроверить флаг остановки
timestamp_begin()Начать замер времени
timestamp_write()Записать промежуточную метку
work_begin()Начать работу (бюджет времени)
work_end()Завершить работу
ask_end(): boolПроверить превышение бюджета

Свойства

СвойствоТипОписание
$dataarrayДанные задачи (для data_save/load)
$datakeystringКлюч в cron_data
$dbobject|nullПодключение к БД
$work_idintID текущего выполнения в cron_work
$work_timefloatБюджет времени
$timestampsarrayМетки времени

Таблица cron

ПолеТипОписание
idBIGINT PKID
fileVARCHAR(255) UNIQUEПуть к файлу
classnameVARCHAR(255) UNIQUEИмя класса
enableTINYINT(1)Включена
time_periodINTПериод запуска (сек)
max_threadsINTМакс. потоков
time_workINTБюджет времени (сек)
descriptionTEXTОписание
last_runDATETIMEПоследний запуск

Таблица cron_work

ПолеТипОписание
idBIGINT PKID
cron_idBIGINT FK → cron.idID задачи
statusVARCHAR(255)DO / DONE / FAILED
time_beginDATETIMEНачало
time_endDATETIMEКонец
logLONGTEXTЛог
timestampsLONGTEXTМетки
avgDOUBLEСреднее время
countDOUBLEКоличество

Таблица cron_data

ПолеТипОписание
keyVARCHAR(255) PKКлюч
dataTEXTСериализованные данные

CLI команды

php iocli schedule:run          # Выполнить все due задачи
php iocli schedule:run --id=3   # Выполнить конкретную по ID
php iocli schedule:list         # Список активных задач
php iocli schedule:status       # Статистика (running/done/failed)

Расписание

Расписание cron задач настраивается в таблице cron напрямую. Задачи с enable=1 запускаются при schedule:run.

Планировщик внешний (системный crontab):

# Каждую минуту
* * * * * cd /var/www/php && php iocli schedule:run >> /var/log/cron.log 2>&1

Сервис: ScheduleService

IO\Console\Services\ScheduleService — центральный сервис:

МетодОписание
getDueJobs()Получить задачи для запуска
runJob(int $cronId)Запустить по ID
runJobByClass(string $class)Запустить по имени класса
getStats()Статистика {total, running, completed, failed}

Пример: DeleteCron

<?php
declare(strict_types=1);

namespace App\Crons;

use IO\Console\ScheduleTemplate;

class DeleteCron extends ScheduleTemplate
{
    public function cron_ask(): bool
    {
        return true;
    }

    public function cron_do(): void
    {
        $date = iogetdbtimeutc(floor(time() / 86400) * 86400 - 7 * 24 * 60 * 60);
        $this->app()->iodb->delete('cron_work', [
            '<=time_begin' => $date,
        ]);
    }
}
Prev
Обзор работы с базами данных
Next
Фабрики