executor

Фоновый процесс-воркер — постоянно крутится на сервере и выполняет задачи из очереди

Зачем нужна

Команда запускает процесс-воркер, который и есть «исполнитель» сервера: он подхватывает задачи из очереди (UEM-задачи, синхронизация LDAP, фоновые операции) и исполняет их параллельно. Без работающего executor сервер не выполняет ни одну фоновую задачу — UEM перестаёт работать, плановые операции стоят на месте

В обычном режиме executor запущен под systemd как rudesktop-executor.service. Ручной запуск нужен для отладки, разовой обработки очереди или в специфичных сценариях

Типичные случаи применения:

  • запуск дополнительной точки распространения (runner) на отдельной машине

  • отладка обработки задач — запустить executor вручную в foreground, увидеть лог в реальном времени

  • настройка интервала опроса (--delay) или режима LISTEN/NOTIFY (--listen) для оптимизации нагрузки на БД

  • разовая обработка зависшей очереди после восстановления службы

Описание

Что происходит при старте

  1. Находит себя в базе — ищет запись Runner по PUBLIC_HOST (hostname сервера). Если режим executor и записи нет — падает с ошибкой: «Точка распространения не найдена в админ-панели. Пожалуйста, создайте точку распространения…»

  2. Записывает в Redis информацию о машине: ОС, количество CPU, RAM, версию rudesktop — это видно в интерфейсе администратора

  3. Определяет количество воркеров (параллельных процессов):

    • Если в настройках Runner’а выставлено is_auto_forks = True — считает автоматически: (cpu_count - load_average) * 2.5

    • Если задано вручную (forks = 8) — использует это число

Основной цикл (бесконечный) каждую итерацию:

  1. Запустить просроченные задачи по расписанию (Job.objects.due())

  2. Взять задачи из очереди и выполнить их (пока есть)

  3. Каждые ~8 минут — обновить метаинфо в Redis и пересчитать воркеры

  4. Подождать –delay секунд (или событие NOTIFY от PostgreSQL)

Если Runner отключён в админке (enabled = False) — цикл пропускается, процесс спит 60 секунд и снова проверяет

Приоритеты задач

Задачи берутся из очереди по приоритету (сначала высокий), потом по времени создания:

  • Критический - 10

  • Высокий - 7

  • Средний - 5

  • Низкий (по умолчанию) - 0

  • Принудительный запуск - 1000

Остановка

При Ctrl+C или SIGTERM — все задачи со статусом IN_PROGRESS текущего runner’а удаляются из очереди, затем процесс завершается

Синтаксис

rude executor [--delay DELAY] [--listen]

Параметры

Параметр

Описание

--delay

Количество секунд которое нужно подождать чтобы проверить наличие новых задач.

--listen

Используйте LISTEN/NOTIFY для ожидания событий.

Примеры

  1. Просто запустить (проверяет очередь каждую секунду)

    rude executor
    
  2. Проверять очередь каждые 5 секунд (меньше нагрузки на БД)

    rude executor --delay 5
    
  3. Использовать PostgreSQL NOTIFY — реагировать мгновенно, без polling

    rude executor --listen
    
  4. Комбинация: мгновенная реакция + резервный интервал 3 секунды

    rude executor --listen --delay 3