Перейти к содержанию

Troubleshooting

На этой странице

Когда cron-задание ведёт себя не так, как ожидалось, выполните эти проверки по порядку. Большинство проблем относятся к одной из четырёх категорий: время выполнения, доставка, разрешения или загрузка навыков.


Задания не запускаются

Проверка 1: Убедитесь, что задание существует и активно

hermes cron list  

Найдите задание и убедитесь, что его статус — [active] (не [paused] и не [completed]). Если отображается [completed], возможно, исчерпан лимит повторов — отредактируйте задание, чтобы сбросить его.

Проверка 2: Подтвердите правильность расписания

Неправильно отформатированное расписание по умолчанию выполняется как одноразовое или отклоняется полностью. Проверьте ваше выражение:

Ваше выражение Должно выполняться
0 9 * * * Каждый день в 9:00
0 9 * * 1 Каждый понедельник в 9:00
every 2h Каждые 2 часа от текущего момента
30m Через 30 минут от текущего момента
2025-06-01T09:00:00 1 июня 2025 года в 9:00 UTC

Если задание выполняется один раз и затем исчезает из списка, это одноразовое расписание (30m, 1d или ISO-метка времени) — ожидаемое поведение.

Проверка 3: Запущен ли шлюз?

Cron-задания запускаются фоновым потоком тикера шлюза, который срабатывает каждые 60 секунд. Обычная сессия CLI-чата не запускает cron-задания автоматически.

Если вы ожидаете, что задания будут запускаться автоматически, вам нужен работающий шлюз (hermes gateway или hermes serve). Для разовой отладки вы можете вручную вызвать тик с помощью hermes cron tick.

Проверка 4: Проверьте системные часы и часовой пояс

Задания используют локальный часовой пояс. Если часы вашей машины неверны или находятся в другом часовом поясе, задания будут запускаться в неправильное время. Проверьте:

date  
hermes cron list   # Сравните время next_run с локальным временем  

Сбои доставки

Проверка 1: Убедитесь, что цель доставки указана верно

Цели доставки чувствительны к регистру и требуют правильной настройки платформы. Неправильно настроенная цель молча отбрасывает ответ.

Цель Требуется
telegram TELEGRAM_BOT_TOKEN в ~/.hermes/.env
discord DISCORD_BOT_TOKEN в ~/.hermes/.env
slack SLACK_BOT_TOKEN в ~/.hermes/.env
whatsapp Настроенный шлюз WhatsApp
signal Настроенный шлюз Signal
matrix Настроенный домашний сервер Matrix
email Настроенный SMTP в config.yaml
sms Настроенный SMS-провайдер
local Право записи в ~/.hermes/cron/output/
origin Доставка в чат, где было создано задание

Другие поддерживаемые платформы включают mattermost, homeassistant, dingtalk, feishu, wecom, weixin, bluebubbles, qqbot и webhook. Вы также можете указать конкретный чат с помощью синтаксиса платформа:ид_чата (например, telegram:-1001234567890).

Если доставка не удалась, задание всё равно выполняется — оно просто не отправляет результат никуда. Проверьте hermes cron list на наличие обновлённого поля last_error (если доступно).

Проверка 2: Проверьте использование [SILENT]

Если ваше cron-задание не выдаёт вывода или агент отвечает [SILENT], доставка подавляется. Это предусмотрено для мониторинговых заданий — но убедитесь, что ваш промпт случайно не подавляет всё подряд.

Промпт, который говорит «ответь [SILENT], если ничего не изменилось», также будет молча проглатывать непустые ответы. Проверьте вашу условную логику.

Проверка 3: Разрешения токенов платформы

Каждому боту платформы обмена сообщениями требуются определённые разрешения для получения сообщений. Если доставка молча не срабатывает:

  • Telegram: Бот должен быть администратором в целевой группе/канале
  • Discord: Бот должен иметь разрешение на отправку в целевой канал
  • Slack: Бот должен быть добавлен в рабочее пространство и иметь область chat:write

Проверка 4: Оборачивание ответа

По умолчанию ответы cron оборачиваются заголовком и подвалом (cron.wrap_response: true в config.yaml). Некоторые платформы или интеграции могут неправильно это обрабатывать. Чтобы отключить:

cron:  
  wrap_response: false  

Сбои загрузки навыков

Проверка 1: Убедитесь, что навыки установлены

hermes skills list  

Навыки должны быть установлены до того, как их можно будет прикрепить к cron-заданиям. Если навык отсутствует, установите его сначала с помощью hermes skills install <имя-навыка> или через /skills в CLI.

Проверка 2: Проверьте имя навыка и имя папки навыка

Имена навыков чувствительны к регистру и должны соответствовать имени папки установленного навыка. Если ваше задание указывает ai-funding-daily-report, но папка навыка — ai-funding-daily-report, уточните точное имя из hermes skills list.

Проверка 3: Навыки, требующие интерактивных инструментов

Cron-задания выполняются с отключёнными наборами инструментов cronjob, messaging и clarify. Это предотвращает рекурсивное создание cron-заданий, прямую отправку сообщений (доставка обрабатывается планировщиком) и интерактивные запросы. Если навык полагается на эти наборы инструментов, он не будет работать в контексте cron.

Проверьте документацию навыка, чтобы убедиться, что он работает в неинтерактивном (безголовом) режиме.

Проверка 4: Порядок нескольких навыков

При использовании нескольких навыков они загружаются по порядку. Если Навык A зависит от контекста Навыка B, убедитесь, что B загружается первым:

/cron add "0 9 * * *" "..." --skill context-skill --skill target-skill  

В этом примере context-skill загружается перед target-skill.


Ошибки и сбои заданий

Проверка 1: Просмотрите недавний вывод задания

Если задание запустилось и завершилось с ошибкой, вы можете найти контекст ошибки в:

  1. Чате, куда доставляется задание (если доставка прошла успешно)
  2. ~/.hermes/logs/agent.log для сообщений планировщика (или errors.log для предупреждений)
  3. Метаданных last_run задания через hermes cron list

Проверка 2: Типичные шаблоны ошибок

«No such file or directory» для скриптов Путь к script должен быть абсолютным (или относительным относительно каталога конфигурации Hermes). Проверьте:

ls ~/.hermes/scripts/your-script.py   # Должен существовать  
hermes cron edit <job_id> --script ~/.hermes/scripts/your-script.py  

«Skill not found» при выполнении задания Навык должен быть установлен на машине, где запущен планировщик. Если вы переключаетесь между машинами, навыки не синхронизируются автоматически — переустановите их с помощью hermes skills install <имя-навыка>.

Задание запускается, но ничего не доставляет Вероятно, проблема с целью доставки (см. «Сбои доставки» выше) или молча подавленный ответ ([SILENT]).

Задание зависает или истекает по тайм-ауту Планировщик использует тайм-аут на основе бездействия (по умолчанию 600 с, настраивается через переменную окружения HERMES_CRON_TIMEOUT, 0 — без ограничения). Агент может работать столько, сколько активно вызывает инструменты — таймер срабатывает только после продолжительного бездействия. Долгие задания должны использовать скрипты для сбора данных и доставлять только результат.

Проверка 3: Конкуренция блокировок

Планировщик использует файловую блокировку для предотвращения перекрывающихся тиков. Если запущено два экземпляра шлюза (или сессия CLI конфликтует со шлюзом), задания могут задерживаться или пропускаться.

Завершите дублирующиеся процессы шлюза:

ps aux | grep hermes  
# Завершите дублирующиеся процессы, оставьте только один  

Проверка 4: Разрешения на jobs.json

Задания хранятся в ~/.hermes/cron/jobs.json. Если этот файл не читается/не записывается вашим пользователем, планировщик молча выйдет из строя:

ls -la ~/.hermes/cron/jobs.json  
chmod 600 ~/.hermes/cron/jobs.json   # Ваш пользователь должен быть владельцем  

Проблемы производительности

Медленный запуск задания

Каждое cron-задание создаёт новый сеанс AIAgent, что может включать аутентификацию провайдера и загрузку модели. Для чувствительных ко времени расписаний добавьте буферное время (например, 0 8 * * * вместо 0 9 * * *).

Слишком много перекрывающихся заданий

Планировщик выполняет задания последовательно в рамках каждого тика. Если несколько заданий должны выполниться в одно и то же время, они запускаются одно за другим. Рассмотрите возможность разнесения расписаний (например, 0 9 * * * и 5 9 * * * вместо обоих в 0 9 * * *), чтобы избежать задержек.

Большой вывод скрипта

Скрипты, которые выводят мегабайты данных, замедляют работу агента и могут достичь лимитов токенов. Фильтруйте/суммируйте на уровне скрипта — выводите только то, что необходимо агенту для анализа.


Диагностические команды

hermes cron list                    # Показать все задания, состояния, время next_run  
hermes cron run <job_id>            # Запланировать на следующий тик (для тестирования)  
hermes cron edit <job_id>           # Исправить проблемы конфигурации  
hermes logs                         # Просмотреть последние логи Hermes  
hermes skills list                  # Проверить установленные навыки  

Получение дополнительной помощи

Если вы прошли это руководство, но проблема остаётся:

  1. Запустите задание с помощью hermes cron run <job_id> (запускается при следующем тике шлюза) и следите за ошибками в выводе чата
  2. Проверьте ~/.hermes/logs/agent.log на сообщения планировщика и ~/.hermes/logs/errors.log на предупреждения
  3. Откройте issue на github.com/NousResearch/hermes-agent с:
    • ID задания и расписанием
    • Целью доставки
    • Ожидаемым и фактическим результатом
    • Соответствующими сообщениями об ошибках из логов

Полную информацию о cron см. в разделах Автоматизация всего с помощью Cron и Планировщик задач (Cron).