노스캐롤라이나에서 인사드립니다! 저는 오픈 소스 작업 스케줄러인 cronstable을 개발해 왔습니다. 이 스케줄러는 웹 및 터미널 대시보드와 네이티브 iOS 앱을 갖추고 있습니다. 여러분들이 이것을 활용하실 수 있기를 바랍니다. cronstable은 Gustavo Carneiro의 yacron에서 포크(fork)한 것입니다. 저는 개인 프로젝트에 yacron을 사용하다가, 프로젝트를 구체화하면서 부족하다고 느끼는 기능들이 계속 생겼습니다. 6월에 0.19 버전으로 가져와 기능을 추가하기 시작했고, cronstable은 기본적으로 그 결과물입니다. 만약 표준 cron이 여러분의 요구사항을 충족한다면 그대로 사용하시면 됩니다. Cronstable은 실패 처리(failure handling), 대시보드, 또는 여러 머신 간의 조정(coordination) 기능이 필요할 때 적합합니다. 핵심은 스케줄러 자체입니다. 대시보드, 클러스터링, 푸시 알림과 같은 기능들은 모두 선택적이며, 원할 때 설정 파일에서 활성화할 수 있습니다. GitHub · 라이브 데모 · iOS 앱 · 위키
이것이 유용한 몇 가지 사용 사례:
- 야간 백업이 실행되지 않았을 때 알림을 받는 것 (나중에 복원해야 한다는 것을 발견하는 대신).
- 불안정한 오프사이트 동기화(offsite sync)를 재시도하고, 재시도가 모두 실패했을 경우에만 ntfy로 알림을 받는 것.
- 컴퓨터가 재부팅되는 동안 예정되어 있던 작업을, 다시 올라왔을 때 실행시키는 것.
- 오류를 출력하지만 여전히 0으로 종료되는 스크립트를 포착하는 것.
주요 기능:
스케줄링: YAML 또는 기존 crontab 사용 가능. 핵심 스케줄러에는 작업별 시간대(per-job time zones), 영업일 스케줄, 그리고 작업이 실행되지 않은 이유를 설명하고 일광 절약 시간제(daylight saving time)가 건너뛰는 시간을 표시하는 도구가 포함되어 있습니다.
실패 처리: 작업에 대해 '실패'의 의미를 정의하고, 자동으로 재시도하며, 실패, 누락된 실행, 또는 너무 오래 걸리는 작업에 대한 알림을 받을 수 있습니다. 알림은 이메일, Slack과 호환되는 웹훅(webhook), Sentry, 셸 명령어, 또는 푸시 알림으로 전송됩니다.
대시보드 및 통합: 실시간 로그, 실행 기록, CPU/메모리 차트, 클러스터 보기와 함께 Prometheus 메트릭 및 REST API를 제공합니다.
워크플로우: 작업을 연결하고(chain tasks), 데이터가 작업 간에 전달되도록 하며, 승인 게이트(approval gates)를 추가하고, 성공적인 결과는 유지하면서 실패한 부분을 재시도할 수 있습니다.
재시작에도 생존: 옵트인(opt-in) 영구 상태(durable state)가 실행 기록과 보류 중인 재시도 횟수를 유지하며, cronstable은 다운되었던 동안 놓쳤던 실행들을 따라잡습니다. 클러스터링: 여러 머신에서 cronstable을 실행하고 이들이 리더를 선출하여 쿼럼(quorum)을 확립합니다. 따라서 추가 노드들은 모든 머신이 모든 작업을 수행하는 대신 장애 조치(failover) 역할을 합니다. 리더가 죽으면 다른 노드가 스케줄을 이어받습니다. Kubernetes, etcd, 공유 폴더 또는 노드 간의 일반적인 상호 TLS(mutual TLS)를 통해 조정할 수 있습니다. TLS 모드는 다른 것이 실행될 필요가 없으며, 부하를 분산하기 위해 작업을 플릿(fleet) 전체에 걸쳐 전파할 수 있습니다. 네이티브 iOS 컴패니언 (무료 앱): QR 코드를 스캔하여 페어링하고, 휴대폰에서 작업 및 로그를 확인하며, 종단 간 암호화된 푸시 알림을 받고, 잠금 화면(Lock Screen)에서 워크플로우 게이트를 승인할 수 있습니다. Docker에서 실행하려면 설정을 마운트하고 컨테이너를 시작합니다: docker run --rm -p 8080:8080 \ -v "$PWD/cronstable.yaml:/etc/cronstable.d/cronstable.yaml:ro" \ ghcr.io/ptweezy/cronstable:latest Docker 이미지는 여덟 가지 변형(Debian slim, Alpine, distroless 등)으로 제공됩니다. pip, Homebrew 또는 WinGet으로 설치할 수 있습니다. 또한 Linux, macOS, Windows, FreeBSD, OpenBSD, NetBSD 및 illumos용 사전 구축된 바이너리가 있으며, Linux 빌드는 x86, ARM, RISC-V, POWER 및 IBM Z를 지원합니다. cronstable 자체는 무료이며 MIT 라이선스를 따릅니다. iOS 앱 역시 무료이며, 기기당 월 500개의 푸시 알림과 단일 서버에 대한 기능을 제공합니다. 선택적 Pro 구독은 이 두 제한을 해제합니다. 이는 릴레이(relay), Apple의 개발자 프로그램 수수료, 그리고 Windows 코드 서명 비용 지불에 도움이 됩니다. "릴레이를 직접 호스팅할 수 있나요?" 공식 App Store 앱의 경우 불가능합니다. Apple은 푸시 키를 앱에 서명하는 개발 팀과 연결하기 때문에, 오직 제 릴레이만이 제 빌드에 푸시할 수 있습니다. 사용자가 자체적으로 실행할 수 없기 때문에, 소스는 공개되어 있어 작동 방식을 읽을 수 있습니다. 또한 어떤 키도 보유하고 있지 않아 기술적으로 신뢰할 필요가 없습니다. 서버는 알림이 휴대폰을 떠나기 전에 각각 암호화하므로, 릴레이가 보는 것은 오직 암호문과 이를 전달하는 데 필요한 라우팅 정보뿐입니다.
작업 이름, 호스트 이름 또는 로그를 읽을 수 없습니다. 푸시 알림은 완전히 선택 사항이며, 이 기능이 꺼져 있으면 릴레이는 전혀 관여하지 않습니다. 현재 앱은 제가 소유하고 있는 것이 전부이기 때문에 iOS 전용입니다. 충분한 관심이 있다면 나중에 Android 및 다른 플랫폼을 우선순위로 고려할 의향이 있습니다. 지금 당장은 web 대시보드와 ntfy가 좋은 임시방편 역할을 할 수 있습니다. cronstable에 보고 싶으신 기능이 있다면 알려주세요. 저는 이 프로젝트의 개발을 계속하는 것이 기대됩니다. 모두 감사합니다! /u/ptweezy 님이 제출했습니다 [링크] [댓글]