Script-Only Cron Jobs: Automate Without Burning Tokens
Script-Only Cron Jobs — easy-to-understand guide based on official docs
Только скриптовые cron-задачи: автоматизация без затрат токенов
Если вы уже игрались с cron-задачами Hermes, вы знаете, насколько они мощные. Но вот вопрос: что если вам не нужен LLM, чтобы думать — вам просто нужно, чтобы что-то выполнялось по расписанию и сообщало, что произошло?
Вот тут и приходят на помощь только скриптовые cron-задачи. Думайте о них как о вашем минималистичном слое автоматизации: тот же планировщик, та же доставка, ноль потраченных токенов LLM.
Когда стоит использовать только скриптовые cron-задачи?
Только скриптовые задачи блистают, когда сам скрипт уже выдаёт именно то сообщение, которое вы хотите увидеть. Никакого анализа не нужно, никакого суммаризации не требуется. Просто чистый, детерминированный вывод.
Вот классические сценарии использования:
- Оповещения о памяти – ваш скрипт проверяет использование RAM и выводит «Память на 92%»
- Предупреждения о дисковом пространстве – та же идея, другая метрика
- Heartbeats – ваш сервис всё ещё жив, вот доказательство
- Любой мониторинг, где скрипт знает ответ – если что-то сломано, скажи об этом; если всё в порядке, молчи
В чём прелесть? Вы получаете надёжность скрипта с мощностью доставки Hermes. Никаких затрат на токены, никакой задержки, никакого «дай-ка я подумаю».
Как это настроить
Самый простой способ? Просто попросите Hermes в чате. Инструмент cronjob достаточно умён, чтобы знать, когда использовать no_agent=True. Он напишет скрипт за вас и всё настроит.
Но если вы хотите сделать это вручную, вот шаблон:
/cron add "every 1h" "Этот промпт не будет использован" --script ~/.hermes/scripts/my-check.py --name "Мой монитор" --deliver telegram
Стоп, этот промпт выглядит странно. Давайте объясню.
Скрипт говорит сам
В только скриптовых cron-задачах stdout скрипта становится сообщением. Никакого LLM между ними. Поэтому ваш скрипт должен выводить ровно то, что вы хотите доставить.
Вот простой пример:
#!/usr/bin/env python3
import shutil
total, used, free = shutil.disk_usage("/")
percent = used / total * 100
if percent > 90:
print(f"⚠️ Диск заполнен на {percent:.1f}% — пора чистить!")
else:
print("[SILENT]")
Видите этот [SILENT] в конце? Это волшебный маркер тишины. Когда Hermes видит [SILENT] в выводе, он ничего не отправляет. Ваш скрипт сам решает, что стоит вашего беспокойства.
Трюк с [SILENT]
Это killer-фича для мониторинговых скриптов. Вместо того чтобы получать уведомления каждый час с текстом «всё хорошо», вы слышите от Hermes только тогда, когда что-то действительно требует внимания.
Логика вашего скрипта:
- Проблема обнаружена? Выводите сообщение-оповещение
- Всё в порядке? Выводите
[SILENT]
Остальное Hermes берёт на себя. Никаких уведомлений в тихие часы, никакой усталости от уведомлений, никакого «почему мой телефон жужжит в 3 часа ночи из-за здорового сервера?»
Только скриптовые задачи против hermes send
Есть ещё один вариант с нулевыми токенами, о котором стоит знать: hermes send. Используйте его, когда у вас есть скрипт, который уже запускается где-то — шаг CI, post-commit хук, скрипт деплоя — и вы просто хотите перенаправить вывод в Telegram или Discord.
./my-deploy-script.sh | hermes send --channel telegram
В чём разница? Только скриптовые cron-задачи предназначены для повторяющихся, запланированных проверок. hermes send — для разовых моментов, когда ваш скрипт сам решает, что пора говорить.
Реальный пример: мониторинг изменений на сайте
Давайте соберём всё вместе. Вот скрипт, который следит за веб-страницей и говорит только тогда, когда что-то меняется:
import hashlib, json, os, urllib.request
URL = "https://example.com/pricing"
STATE_FILE = os.path.expanduser("~/.hermes/scripts/.watch-state.json")
content = urllib.request.urlopen(URL, timeout=30).read().decode()
current_hash = hashlib.sha256(content.encode()).hexdigest()
prev_hash = None
if os.path.exists(STATE_FILE):
with open(STATE_FILE) as f:
prev_hash = json.load(f).get("hash")
with open(STATE_FILE, "w") as f:
json.dump({"hash": current_hash}, f)
if prev_hash and prev_hash != current_hash:
print(f"ОБНАРУЖЕНО ИЗМЕНЕНИЕ на {URL}")
print(f"Предыдущий хэш: {prev_hash}")
print(f"Текущий хэш: {current_hash}")
print(f"\nПервые 2000 символов:\n{content[:2000]}")
else:
print("[SILENT]")
Настройте его с помощью:
/cron add "every 1h" "не используется" --script ~/.hermes/scripts/watch-site.py --name "Монитор цен" --deliver telegram
Скрипт загружает страницу, сравнивает хэши и говорит только тогда, когда что-то отличается. Никаких токенов LLM, никакого шума, просто чистая автоматизация.
Суть
Только скриптовые cron-задачи — это ваша рабочая лошадка автоматизации с нулевыми токенами. Они идеально подходят для:
- Детерминированных проверок, где ответ бинарный
- Высокочастотного мониторинга, где затраты на LLM были бы ощутимы
- Всего, где вы доверяете суждению скрипта больше, чем интерпретации LLM
И самое лучшее? Вам не нужно выбирать между только скриптовыми и LLM-задачами. Смешивайте их в одном рабочем процессе. Используйте скрипты для механических проверок, а LLM пусть занимается интересным — например, суммаризацией того, почему это изменение на сайте важно.
Хотите копнуть глубже? Загляните в полную документацию по cron или в туториал по боту с ежедневным брифингом, чтобы увидеть сторону с LLM.
📖 Официальная документация
Эта статья основана на официальной документации Hermes Agent :Официальные документы › guides/automate-with-cron