Сущность ExternalProcess
Жизненный цикл pending→running→completed/failed/timeout/cancelled; processType, pid, command, inputData, outputData, workingDir.
Универсальный менеджер CLI-процессов: FFmpeg, расписания, любые команды — с очередью и мониторингом.
Жизненный цикл pending→running→completed/failed/timeout/cancelled; processType, pid, command, inputData, outputData, workingDir.
6 методов: prepare/buildCommand/checkCompletion/importResults/onError/cleanup; фабрика создаёт по processType.
Лимит параллельных процессов задаётся в metadata; StartExternalProcess не запустит больше указанного.
setsid sh -c для detach; PID-file; /proc/{pid} и ps для мониторинга; SIGTERM→SIGKILL для завершения.
StartExternalProcess запускает pending; CheckExternalProcess проверяет таймаут и завершение, обновляет лог.
CancelProcess hook: status→cancelled → terminate(pid) → handler.cleanup() — ничего не висит.
Модуль External Process Manager добавляет в платформу BPM2B единый механизм запуска и мониторинга внешних CLI-процессов: FFmpeg, движки расписания, произвольные shell-утилиты. Тяжёлые задачи запускаются как фоновые процессы, отслеживаются по PID и логу, корректно отменяются и собирают результат через типизированные обработчики.
ExternalProcess: запись о процессе со статусами pending → running → completed / failed / timeout / cancelled, полями processType, pid, command, inputData / outputData (jsonObject), workingDir, logFile, consoleOutput и timeoutSeconds (по умолчанию 7200 = 2 часа).ProcessTypeHandlerInterface: 6 методов жизненного цикла — prepare(), buildCommand(), checkCompletion(), importResults(), onError(), cleanup(); ProcessTypeHandlerFactory создаёт handler по processType через InjectableFactory.app.externalProcessHandlers; формат — строка (класс) или объект {handler, maxConcurrent} для контроля параллельности.maxConcurrent на тип процесса; ScheduledJob StartExternalProcess подсчитывает running и запускает не больше указанного предела одновременно.ProcessManager делает setsid sh -c для detach, ждёт PID-файл 5 секунд, отслеживает состояние через /proc/{pid} и ps, завершает SIGTERM → SIGKILL с таймаутом.StartExternalProcess поднимает pending → running с учётом maxConcurrent; CheckExternalProcess проверяет таймаут и завершение, обновляет последние 2 KB логов в consoleOutput.CancelProcess на beforeSave при переходе в cancelled вызывает ProcessManager.terminate(pid) и затем handler.cleanup() — ничего не висит.data/upload/external-processes/{processId}/ с process.log, process.pid и файлами handler'а — после завершения легко чистится.Модуль предназначен как фундамент для всех других модулей платформы, которым нужно дёргать тяжёлые внешние утилиты: bpm2bScheduleGateway, bpm2bScheduleUniver, обработка видео и аудио. Сам по себе никаких конкретных processType не предоставляет — всё подключается потребляющими модулями через metadata.
Покажем работу системы на ваших данных за 30 минут. Расскажем, как окупится в вашей отрасли, и подберём конфигурацию под ваши процессы.