프로젝트 소개

go-schedule은 Linux, macOS, Windows를 위해 Go로 구현된 크로스 플랫폼 작업 스케줄러입니다. 이 프로젝트는 반복 일정을 이해하기 쉽게 만드는 데 중점을 두었습니다. 사용자는 'every 15 minutes' 또는 'weekdays at 09:00'와 같은 평문 표현을 작성하거나, 일반적인 5필드 및 경계가 지정된 6필드 초 단위 형식을 포함하여 문서화된 cron 서브셋을 사용할 수 있습니다. 수락된 일정은 스케줄러의 해석 결과와 다음 실행 시간이 함께 표시되어, 실행 전 오해를 방지할 수 있도록 돕습니다. 이 프로젝트는 CLI(gosched), Wails 기반의 데스크톱 GUI, 그리고 백그라운드 데몬(goschedd)이라는 세 가지 주요 인터페이스를 제공합니다. 데몬은 스케줄링 엔진, SQLite 저장소 및 실행기를 소유하며, CLI와 GUI는 로컬 IPC 엔드포인트(Linux/macOS의 Unix 도메인 소켓, Windows의 명명된 파이프)를 통한 씬 클라이언트로 작동합니다. 이러한 설계 덕분에 GUI를 닫아도 일정은 중단되지 않으며, CLI와 GUI는 동일한 상태에서 작동합니다. 데몬은 systemd, launchd 또는 Windows Service를 통해 시스템 서비스로 등록될 수 있어, 부팅 시 일정이 시작되고 대화형 로그인 없이도 실행될 수 있습니다. 스케줄링 동작에는 IANA 시간대 지원, 일광 절약 시간제 전환의 명시적 처리, UTC 기반 저장 및 RFC 5545 기반의 반복 시맨틱이 포함됩니다. 다운타임 이후에는 실행을 놓친 각 작업에 대해 한 번의 보충 실행(catch-up run)이 수행된 후 정상적으로 재개됩니다. 작업별 중복 정책은 대기 중인 실행 하나를 큐에 넣거나(기본값), 새 실행을 건너뛰거나, 동시 실행을 허용하도록 설정할 수 있습니다. 31일, 2월 29일 또는 다섯 번째 금요일과 같은 캘린더 예외 사례는 해당 기간 건너뛰기, 마지막 유효 날짜로 대체, 또는 다음 기간으로 이월하는 선언된 정책에 따라 처리됩니다. 추가 기능으로는 계층적 활성화/비활성화가 가능한 중첩 그룹, 세부 사항이 확정되기 전 저장 가능한 초안 작업, 수동 전용 작업, 그리고 성공, 실패 또는 모든 종료 결과에 따라 대상 작업을 트리거하는 체이닝 기능이 있습니다. 체인은 내구성이 있는 '최소 한 번 전달(at-least-once delivery)' 방식으로 설명되며, 대기 중인 작업은 데몬 재시작 후에도 유지됩니다. 로컬 외부 트리거 및 트리거 세트를 통해 다른 프로세스가 불투명한 키를 사용하여 일반 스케줄러 실행을 요청할 수 있으며, 트리거 세트는 작업당 1~99개의 독립적으로 사용 가능한 키를 지원합니다. 파일 시스템 감시자는 선택한 파일이 생성, 작성 또는 원자적으로 교체되어 안정화되었을 때 작업 실행을 요청할 수 있으며, 디렉토리 감시자는 기본 이름 글로브(basename glob)를 사용하고 선택적으로 실제 하위 디렉토리를 포함할 수 있습니다. cron 상호 운용성에는 gosched cron 가져오기, 설명 및 내보내기가 포함됩니다. 가져오기 기능은 기존 crontab을 읽어 각 줄을 평문 언어와 다음 실행 시간으로 표시하고 작업을 생성하며, --dry-run을 통해 변경 사항을 미리 볼 수 있습니다. 지원되지 않거나 모호한 구문은 근사치로 처리하지 않고 거부됩니다. @reboot 형식과 읽기 쉬운 'at scheduler startup' 형식은 데몬 프로세스가 시작될 때마다 한 번 실행되는 크로스 플랫폼 시작 작업을 생성합니다. 이 프로젝트는 Apache-2.0 라이선스로 제공됩니다. 릴리스에는 Windows MSI 설치 프로그램, macOS 데스크톱 번들, Linux 데스크톱 번들 및 헤드리스 데몬-CLI 아카이브가 포함됩니다. 문서는 설치, CLI 참조, GUI 필드, cron 상호 운용성, 보안 및 유지 관리자 테스트 스크립트를 다룹니다. 개발은 specs/001-task-scheduler 하위의 사양을 기반으로 진행되며, gofmt, go vet, golangci-lint, go test -race 및 핵심 패키지의 커버리지 목표를 포함한 Go 툴링 표준을 사용합니다.