Версия: 1.0.0
Назначение: Единая точка управления всеми запланированными задачами
ОДИН cron → scheduler → все задачи
Вместо множества cron-записей — одна, которая запускает scheduler.
Scheduler сам решает, какие задачи выполнять, по schedule.yaml.
system/scheduler/
├── CLAUDE.md ← Этот файл
├── run.py ← Движок
├── schedule.yaml ← Расписание (ВСЁ в одном месте)
├── .last_run.yaml ← Состояние (когда что запускалось)
└── tasks/ ← Скрипты задач (опционально)
├── backup.py
├── cleanup.py
└── ...
# /etc/cron.d/claude-scheduler
* * * * * root cd /opt/claude-workspace && python3 system/scheduler/run.py >> /var/log/claude-scheduler.log 2>&1
# /etc/systemd/system/claude-scheduler.timer
[Unit]
Description=Claude Platform Scheduler
[Timer]
OnCalendar=*:*:00
Persistent=true
[Install]
WantedBy=timers.target
# Показать расписание
python3 system/scheduler/run.py --list
# Запустить задачу вручную
python3 system/scheduler/run.py --run monitor_quick
# Показать что будет запущено (без выполнения)
python3 system/scheduler/run.py --dry-run
# Обычный запуск (проверить расписание)
python3 system/scheduler/run.py
tasks:
# Каждые N минут/часов/дней
task_name:
every: "30m" # 30 минут
every: "1h" # 1 час
every: "6h" # 6 часов
every: "1d" # 1 день
# В конкретное время (каждый день)
task_name:
at: "08:00" # в 8:00
at: "03:30" # в 3:30
# Cron-выражение (для сложных случаев)
task_name:
cron: "*/5 * * * *" # каждые 5 минут
cron: "0 */2 * * *" # каждые 2 часа
tasks:
monitor_quick:
description: "Быстрая проверка инфраструктуры"
command: "python3 system/monitor/run.py --quick"
every: "30m"
enabled: true
task_name:
enabled: true # включена
enabled: false # выключена (пропускается)
Логи задач сохраняются в:
.logs/scheduler/
├── monitor_quick.log
├── monitor_full.log
├── daily_report.log
└── ...
Каждый запуск добавляется в лог:
============================================================
[2025-12-21 08:00:00] Starting: daily_report
Command: python3 system/monitor/run.py --report
============================================================
[вывод команды]
[2025-12-21 08:00:05] Finished with code: 0
schedule.yamltasks:
my_new_task:
description: "Описание задачи"
command: "python3 path/to/script.py"
every: "1h"
enabled: true
Файл .last_run.yaml хранит время последнего запуска каждой задачи:
monitor_quick: '2025-12-21T08:30:00'
monitor_full: '2025-12-21T06:00:00'
daily_report: '2025-12-21T08:00:00'
Это позволяет:
- Не запускать задачу дважды
- Продолжить после перезагрузки
.logs/scheduler/Версия: 1.0.0