220 lines
7.7 KiB
Markdown
220 lines
7.7 KiB
Markdown
# 🕐 Интеллектуальная Cron-система
|
||
|
||
Интеллектуальная система планирования задач для Telegram CLI Bot.
|
||
|
||
## 📋 Особенности
|
||
|
||
В отличие от классического cron, задачи выполняются не как команды, а как **промпты для ИИ-агента**.
|
||
|
||
### Структура задачи
|
||
|
||
```python
|
||
CronJob:
|
||
- id: int # Уникальный ID
|
||
- name: str # Название задачи
|
||
- prompt: str # Промпт для ИИ-агента
|
||
- schedule: str # Расписание (@hourly, @daily, */5 * * * *)
|
||
- user_id: int # ID пользователя Telegram
|
||
- enabled: bool # Включена ли задача
|
||
- notify: bool # Уведомлять пользователя в Telegram
|
||
- log_results: bool # Сохранять результат в лог-файл
|
||
- last_run: datetime # Последнее выполнение
|
||
- next_run: datetime # Следующее выполнение
|
||
- created_at: datetime # Дата создания
|
||
```
|
||
|
||
## 🔄 Процесс выполнения
|
||
|
||
```
|
||
┌─────────────────────────────────────────────────────────┐
|
||
│ Cron Scheduler (проверяет каждую минуту) │
|
||
│ ↓ (если время пришло) │
|
||
│ Отправляет промпт ИИ-агенту │
|
||
│ ↓ │
|
||
│ ИИ-агент (Рик) анализирует промпт: │
|
||
│ - Решает какой инструмент использовать │
|
||
│ - Выполняет инструмент (поиск, SSH, RSS) │
|
||
│ ↓ │
|
||
│ Если notify=True → отправка уведомления в Telegram │
|
||
│ Если log_results=True → сохранение в лог-файл │
|
||
└─────────────────────────────────────────────────────────┘
|
||
```
|
||
|
||
## 📝 Команды управления
|
||
|
||
### `/cron list` - Показать все задачи
|
||
|
||
```
|
||
/cron list
|
||
```
|
||
|
||
**Пример вывода:**
|
||
```
|
||
⏰ Ваши задачи:
|
||
|
||
✅ Проверка диска (ID: 1)
|
||
🔔📝 Промпт: Проверить свободное место на сервере...
|
||
Расписание: @daily
|
||
Следующий запуск: 2026-02-26 00:00:00
|
||
Последний запуск: 2026-02-25 00:00:00
|
||
```
|
||
|
||
### `/cron add` - Добавить задачу
|
||
|
||
```
|
||
/cron add <name> <schedule> <prompt>
|
||
```
|
||
|
||
**Параметры:**
|
||
- `name` - название задачи
|
||
- `schedule` - расписание:
|
||
- `@hourly` - каждый час
|
||
- `@daily` - каждый день
|
||
- `@weekly` - каждую неделю
|
||
- `*/5 * * * *` - каждые 5 минут (cron format)
|
||
- `prompt` - промпт для ИИ-агента
|
||
|
||
**Примеры:**
|
||
|
||
```bash
|
||
# Ежедневная проверка диска
|
||
/cron add check_disk @daily Проверить свободное место на сервере home
|
||
|
||
# Ежечасные новости
|
||
/cron add tech_news @hourly Что нового в Linux сегодня
|
||
|
||
# Каждые 5 минут мониторинг
|
||
/cron add monitor */5 * * * * Проверить нагрузку на сервер
|
||
```
|
||
|
||
### `/cron run` - Выполнить задачу немедленно
|
||
|
||
```
|
||
/cron run <id>
|
||
```
|
||
|
||
**Пример:**
|
||
```
|
||
/cron run 1
|
||
```
|
||
|
||
### `/cron remove` - Удалить задачу
|
||
|
||
```
|
||
/cron remove <id>
|
||
```
|
||
|
||
### `/cron toggle` - Включить/выключить задачу
|
||
|
||
```
|
||
/cron toggle <id>
|
||
```
|
||
|
||
## 🛠️ Инструменты ИИ-агента
|
||
|
||
При выполнении задачи ИИ-агент может использовать:
|
||
|
||
| Инструмент | Назначение | Триггеры |
|
||
|------------|------------|----------|
|
||
| `ddgs_tool` | Поиск в интернете | "найди", "поиск", "узнай" |
|
||
| `rss_tool` | Чтение RSS лент | "новости", "почитай", "лента" |
|
||
| `ssh_tool` | SSH-команды | "проверь сервер", "выполни команду" |
|
||
| `cron_tool` | Управление задачами | "напомни", "запланируй" |
|
||
|
||
## 📂 Логирование
|
||
|
||
Результаты выполнения задач сохраняются в:
|
||
```
|
||
cron_logs/
|
||
cron_job_1_check_disk.log
|
||
cron_job_2_tech_news.log
|
||
...
|
||
```
|
||
|
||
**Формат лога:**
|
||
```
|
||
============================================================
|
||
[2026-02-25 10:30:00] Задача: Проверка диска (ID: 1)
|
||
============================================================
|
||
Промпт:
|
||
Проверить свободное место на сервере home
|
||
|
||
Результат:
|
||
Задача 'Проверка диска' выполнена.
|
||
|
||
Использован инструмент: ssh_tool
|
||
Результат: Filesystem Size Used Avail Use% Mounted on
|
||
...
|
||
|
||
```
|
||
|
||
## 🔔 Уведомления
|
||
|
||
Если `notify=True`, бот отправляет уведомление в Telegram:
|
||
|
||
```
|
||
✅ Задача 'Проверка диска' выполнена.
|
||
|
||
Использован инструмент: ssh_tool
|
||
Результат: Свободно 45GB на /dev/sda1
|
||
```
|
||
|
||
## 💡 Примеры использования
|
||
|
||
### 1. Ежедневный мониторинг диска
|
||
|
||
```bash
|
||
/cron add disk_daily @daily Проверить свободное место на сервере home. Если меньше 10GB - предупредить
|
||
```
|
||
|
||
### 2. Ежечасные новости IT
|
||
|
||
```bash
|
||
/cron add it_news @hourly Найти свежие новости про Python и Linux за последний час
|
||
```
|
||
|
||
### 3. Мониторинг нагрузки каждые 5 минут
|
||
|
||
```bash
|
||
/cron add load_monitor */5 * * * * Проверить нагрузку CPU и RAM на сервере
|
||
```
|
||
|
||
### 4. Еженедельный поиск уязвимостей
|
||
|
||
```bash
|
||
/cron add security_scan @weekly Найти информацию о новых уязвимостях в Linux за неделю
|
||
```
|
||
|
||
## 🚀 Архитектура
|
||
|
||
```
|
||
bot/
|
||
tools/
|
||
cron_tool.py # Инструмент управления задачами
|
||
services/
|
||
cron_scheduler.py # Планировщик (проверка каждую минуту)
|
||
handlers/
|
||
commands.py # Обработчик команды /cron
|
||
```
|
||
|
||
## ⚙️ Технические детали
|
||
|
||
- **Проверка задач:** каждую минуту (60 секунд)
|
||
- **Хранение:** SQLite (`cron.db`)
|
||
- **Логи:** текстовые файлы (`cron_logs/`)
|
||
- **Формат расписания:** cron format или специальные (@hourly, @daily, @weekly)
|
||
|
||
## 🎯 Отличия от классического cron
|
||
|
||
| Классический cron | Интеллектуальный cron |
|
||
|-------------------|----------------------|
|
||
| Выполняет команды | Выполняет промпты для ИИ |
|
||
| Жёсткая логика | Гибкое решение через ИИ |
|
||
| Вывод в stdout/email | Уведомления в Telegram + логи |
|
||
| Нет контекста | ИИ использует контекст и память |
|
||
|
||
---
|
||
|
||
*Версия: 0.5.3*
|
||
*Интеллектуальная cron-система с AI-агентом*
|