Об этом проекте

go-schedule — это кроссплатформенный планировщик задач, реализованный на Go для Linux, macOS и Windows. Он создан для того, чтобы периодические расписания были понятными: пользователи могут записывать выражения обычным языком, например «каждые 15 минут» или «в будни в 09:00», либо использовать задокументированное подмножество cron, включая обычные пяти- и шести-поле (с секундами) формы. Принятые расписания отображаются обратно с интерпретацией планировщика и временем следующего запуска, что помогает обнаруживать ошибки до их выполнения. Проект предоставляет три основных интерфейса: CLI (gosched), десктопный GUI на базе Wails и фоновый демон (goschedd). Демон управляет движком планирования, хранилищем SQLite и исполнителем, тогда как CLI и GUI являются тонкими клиентами через локальный IPC-эндпоинт (Unix domain socket на Linux/macOS, именованный канал на Windows). Эта архитектура означает, что закрытие GUI не останавливает расписания, а CLI и GUI работают с одним состоянием. Демон может регистрироваться как системная служба через systemd, launchd или Windows Service, чтобы расписания запускались при загрузке и могли работать без интерактивного входа в систему. Поведение планирования включает поддержку временных зон IANA, явную обработку переходов на летнее/зимнее время, хранение в UTC и семантику повторений на основе RFC 5545. После простоя каждая задача, пропустившая запуск, получает один catch-up запуск, а затем продолжает работу в обычном режиме. Для каждой задачи возможны политики перекрытия: постановка одного ожидающего запуска (по умолчанию), пропуск нового запуска или разрешение параллельных запусков. Календарные крайние случаи — задачи, запланированные на 31-е число, 29 февраля или пятую пятницу, — обрабатываются согласно объявленной политике: пропуск периода, возврат к последней допустимой дате или перенос на следующий период. Дополнительные возможности включают вложенные группы с каскадным включением/выключением, черновики задач, которые можно сохранять до выяснения всех деталей, задачи только для ручного запуска и цепочки, при которых завершение одной задачи с результатом success, failure или любым терминальным результатом может запустить целевую задачу. Цепочки описываются как надёжная доставка не менее одного раза, и неотложная работа переживает перезапуск демона. Локальные внешние триггеры и наборы триггеров позволяют другим процессам запрашивать обычный запуск планировщика с помощью непрозрачных ключей; наборы триггеров поддерживают 1–99 независимо используемых ключей на задачу. Наблюдатели файловой системы могут запрашивать запуск задачи при создании файла, его изменении или атомарной замене и стабилизации; наблюдатели директорий используют glob по базовому имени и могут опционально включать реальные поддиректории. Крон-взаимодействие включает импорт, объяснение и экспорт cron в gosched. Импорт читает существующий crontab, показывает каждую строку обычным языком и её следующий запуск, и создаёт задачи; флаг --dry-run демонстрирует изменения без применения. Неоднозначные или неподдерживаемые конструкции отвергаются, а не аппроксимируются. Форма @reboot и читаемая форма «при запуске планировщика» создают кроссплатформенную задачу старта, которая выполняется один раз при каждом запуске процесса демона. Проект распространяется под лицензией Apache-2.0. Релизы включают установщик MSI для Windows, десктопный пакет для macOS, десктопный пакет для Linux и headless-архивы демона и CLI. Документация охватывает установку, справочник CLI, поля GUI, крон-взаимодействие, безопасность и скрипты тестирования для сопровождения. Разработка ведётся на основе спецификаций, находящихся в specs/001-task-scheduler, и использует стандарты инструментов Go, включая gofmt, go vet, golangci-lint, go test -race и целевые показатели покрытия для ключевых пакетов.