3.3 KiB
3.3 KiB
| domain | last_rule_review_commit | last_rule_updated_at |
|---|---|---|
| scheduler | 810532a097 |
2026-06-24 |
scheduler
목적 / 책임
등록된 YAML 파이프라인을 백그라운드에서 cron 또는 interval 방식으로 실행하는 스케줄러 도메인이다.
CLI의 scheduler 명령, OS별 실행 경로, isolate 기반 실행, 등록 파일/로그 파일 관리를 담당한다.
포함 경로
apps/runner/lib/cli/commands/command_scheduler.dart—schedulerCLI 명령 파싱과 진입점apps/runner/lib/cli/commands/scheduler/— 스케줄러 등록/해제/실행/OS별 구현apps/runner/lib/cli/commands/scheduler/data/— 스케줄러 설정 JSON 직렬화 모델
제외 경로
apps/runner/lib/cli/cli.dart— 일반 CLI 출력/명령 라우팅 (cli도메인)apps/runner/lib/cli/commands/command_exe.dart— 파이프라인 실행 isolate 진입 (cli도메인). 단, scheduler가 실행을 위임한다apps/runner/lib/oto/pipeline/— 실제 파이프라인 실행 흐름 (pipeline도메인)apps/runner/lib/oto/commands/— 실제 커맨드 실행 (command도메인)
주요 구성 요소
CommandScheduler—-l,-r,-u,-e, 숨김-s,-t플래그 처리SchedulerManager— 스케줄러 등록 파일, settings.json, 로그, 프로세스 시작/종료 관리SchedulerLinux/SchedulerOsx/SchedulerWindows— OS별 실행 파일 경로 결정IsolateScheduler— 스케줄러 YAML 변경 감지, cron/interval 실행, 로그 전송SchedulerInterval— interval 기반 반복 실행 제어SchedulerListData/SchedulerData— 로컬 scheduler settings JSON 모델
유지할 패턴
- OS별 차이는
scheduler_linux.dart,scheduler_osx.dart,scheduler_windows.dart에 분리한다 - YAML 파싱은
Application.getMapFromYamlA()와DataBuild.fromJson()흐름을 사용한다 - 실제 파이프라인 실행은
CommandExe.executeScheduler()에 위임하고, scheduler가 command/pipeline 내부를 직접 해석하지 않는다 - 스케줄러 등록 데이터는
dataPath/scheduler하위의 YAML과settings.json구조를 유지한다 - 로그 파일명에는 alias, pid, 날짜/시간을 포함하는 기존 패턴을 유지한다
- scheduler 데이터 모델 변경 시
dart run build_runner build와dart analyze를 실행한다
다른 도메인과의 경계
- cli: 일반 CLI 라우팅과 출력은 cli 도메인이다. scheduler 도메인은
scheduler명령 이후의 등록/실행 정책을 담당한다 - core: YAML 파싱과
Application.build()는 core 도메인이다. scheduler는 실행 타이밍과 로그 파일을 준비해 위임한다 - pipeline/command: scheduler는 파이프라인과 커맨드를 직접 실행하지 않고
CommandExe.executeScheduler()를 통해 실행한다 - sample: scheduler YAML 예시는
apps/runner/assets/yaml/sample/12_scheduler.yaml에서 관리한다
금지 사항
- scheduler 내부에서
Command.byType()또는Pipeline.pipelineInitialize()를 직접 호출하지 않는다 - OS별 실행 경로 보정 로직을 공통
SchedulerManager에 섞지 않는다 - 등록/해제 작업에서 사용자가 지정한 YAML 외 임의의 프로젝트 파일을 수정하지 않는다
- scheduler 샘플에 실제 토큰, 비밀번호, API 키를 넣지 않는다