system/scheduler/CLAUDE.md

Scheduler — Управление расписанием платформы

Версия: 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
    └── ...

УСТАНОВКА

Cron (одна строка)

# /etc/cron.d/claude-scheduler
* * * * * root cd /opt/claude-workspace && python3 system/scheduler/run.py >> /var/log/claude-scheduler.log 2>&1

Или systemd timer

# /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

SCHEDULE.YAML

Форматы расписания

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

ДОБАВИТЬ ЗАДАЧУ

  1. Открыть schedule.yaml
  2. Добавить задачу:
tasks:
  my_new_task:
    description: "Описание задачи"
    command: "python3 path/to/script.py"
    every: "1h"
    enabled: true
  1. Сохранить — scheduler подхватит автоматически

СОСТОЯНИЕ

Файл .last_run.yaml хранит время последнего запуска каждой задачи:

monitor_quick: '2025-12-21T08:30:00'
monitor_full: '2025-12-21T06:00:00'
daily_report: '2025-12-21T08:00:00'

Это позволяет:
- Не запускать задачу дважды
- Продолжить после перезагрузки


СВЯЗИ


Версия: 1.0.0