Устранение неполадок Cron

Если 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: Запущен ли gateway?

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

Если вы ожидаете, что задания будут выполняться автоматически, вам нужен работающий gateway (hermes gateway для переднего плана или hermes gateway start для установленного сервиса). Для одноразовой отладки вы можете вручную запустить тик с помощью 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 gateway настроен
signal Signal gateway настроен
matrix Matrix homeserver настроен
email SMTP настроен в config.yaml
sms SMS-провайдер настроен
local Право на запись в ~/.hermes/cron/output/
origin Доставляет в чат, где было создано задание

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

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

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

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

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

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

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

Проверка 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.

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

Проверка 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: Конфликт блокировок

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

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

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> (срабатывает при следующем тике gateway) и следите за ошибками в выводе чата

  2. Проверьте ~/.hermes/logs/agent.log на наличие сообщений планировщика и ~/.hermes/logs/errors.log для предупреждений

  3. Откройте issue на github.com/NousResearch/hermes-agent, указав:

  4. ID задания и расписание
  5. Цель доставки
  6. Чего вы ожидали и что произошло на самом деле
  7. Соответствующие сообщения об ошибках из логов

Полный справочник по cron см. в разделах Automate Anything with Cron и Scheduled Tasks (Cron).