;

Hermes 크론 작업 등록과 Telegram 실패 알림 설정 방법 본문

Ai

Hermes 크론 작업 등록과 Telegram 실패 알림 설정 방법

WindowsHyun 2026. 7. 3. 10:29
반응형

개요

본 포스트는 Hermes cron 작업을 등록하고 실행 결과와 실패 알림을 Telegram으로 받는 과정을 설명합니다. 앞선 포스트에서 Hermes 설치와 Telegram 연동이 끝난 상태를 기준으로 진행합니다.

설치 글이 필요하면 https://windowshyun.tistory.com/55 글과 Hermes 설치 글을 확인하시면 됩니다. 여기서는 설치보다 운영 중 반복 작업을 안전하게 받는 흐름에 집중합니다.

실제 문제 상황

개인 서버를 운영하면 반복 확인할 일이 계속 생깁니다. 디스크 용량, Docker 컨테이너 상태, 백업 성공 여부, 인증서 만료일 같은 값은 사람이 매번 접속해서 보는 방식으로 오래 유지하기 어렵습니다.

Hermes cron은 이런 작업을 예약 작업으로 등록하고, 결과를 Telegram 같은 메신저로 보내는 용도에 맞습니다. 단순히 명령만 실행하는 cron과 달리, 결과를 짧게 요약해서 받을 수 있고 실패했을 때도 같은 채널에서 확인할 수 있습니다.

전체 구성 흐름

Hermes cron: hermes cron create로 작업 이름, 실행 주기, 작업 내용을 등록.

Hermes scheduler: 등록된 시간에 작업 실행. hermes cron statushermes cron list로 상태 확인.

Telegram deliver: --deliver telegram 또는 --deliver telegram:<chat_id>로 결과 전달.

Gateway: Telegram 메시지를 주고받는 통로. 메신저 연동 글에서 설정한 hermes gateway가 실행 중이어야 합니다.

사전 준비 사항

  • Hermes 설치와 첫 실행 설정이 끝나 있어야 합니다.
  • Telegram 봇 토큰과 허용 사용자 설정이 끝나 있어야 합니다.
  • TELEGRAM_HOME_CHANNEL 또는 받을 채팅 ID를 알고 있어야 합니다.
  • 서버에서 hermes gateway status 명령을 실행할 수 있어야 합니다.

Telegram Bot Token은 비밀번호와 같습니다. 글, GitHub, 스크린샷에 원문을 올리면 안 됩니다.

적용 대상

서버 점검 알림: 디스크, 메모리, Docker 상태를 정해진 시간마다 받고 싶은 경우.

개인 자동화: 매일 아침 작업 목록, RSS 요약, 백업 결과를 받고 싶은 경우.

운영 기록: 실패한 작업을 나중에 확인할 수 있게 같은 채널에 남기고 싶은 경우.

적용 제외: 몇 달에 한 번만 실행하는 수동 작업이나, 절대 자동 실행하면 안 되는 삭제 작업은 cron으로 등록하지 않는 것을 권장합니다.

1. Gateway 상태 확인

Telegram으로 메시지를 보낼 통로가 살아 있는지 확인합니다.

hermes gateway status

상태가 정상이라면 Telegram으로 직접 테스트 메시지를 보냅니다.

hermes send --to telegram "Hermes Telegram test"

메시지가 도착하지 않으면 cron 등록 전에 Telegram 연동부터 다시 확인하시면 됩니다.

2. 기본 cron 작업 등록

가장 단순한 형태는 일정과 작업 내용을 같이 등록하는 방식입니다.

hermes cron create --deliver telegram "every 1h" "서버 디스크 사용량을 확인하고 위험하면 짧게 알려줘"

every 1h: 1시간마다 실행.

--deliver telegram: 결과를 기본 Telegram 채널로 전달.

마지막 문자열: Hermes가 실행할 작업 지시문.

특정 채팅방으로 보내고 싶으면 telegram:<chat_id> 형식을 사용합니다.

hermes cron create --deliver telegram:-1001234567890 "every 30m" "Docker 컨테이너 상태를 확인하고 중지된 항목만 알려줘"

개인 DM으로 받을 때는 숫자 User ID, 그룹방은 -100으로 시작하는 채팅 ID를 사용해주시면 됩니다.

3. 등록된 작업 확인

등록 후에는 목록에서 작업 ID와 상태를 확인합니다.

hermes cron list

스케줄러 상태는 아래 명령으로 확인합니다.

hermes cron status

작업을 바로 한 번 실행하고 싶으면 run을 사용합니다.

hermes cron run <job_id>

run은 작업을 즉시 직접 실행한다기보다 다음 scheduler tick에서 실행되도록 표시하는 용도입니다. 그래서 실행 후에는 Telegram 도착 여부와 cron list 상태를 같이 확인하시면 됩니다.

4. 스크립트 기반 알림 등록

LLM 요약이 필요 없고, 스크립트 출력만 그대로 보내면 되는 작업은 --script--no-agent를 같이 쓰는 방식이 낫습니다. 비용도 적고 실패 지점도 단순합니다.

예를 들어 ~/.hermes/scripts/disk-alert.sh 파일을 만듭니다.

mkdir -p ~/.hermes/scripts
cat > ~/.hermes/scripts/disk-alert.sh <<'EOF'
#!/usr/bin/env bash
set -euo pipefail
usage=$(df -P / | awk 'NR==2 {gsub("%", "", $5); print $5}')
if [ "$usage" -ge 85 ]; then
  echo "disk alert: / usage ${usage}%"
fi
EOF
chmod +x ~/.hermes/scripts/disk-alert.sh

이제 출력이 있을 때만 Telegram으로 보내도록 등록합니다.

hermes cron create --deliver telegram --script disk-alert.sh --no-agent "every 30m"

--no-agent 모드에서는 stdout이 비어 있으면 조용히 넘어갑니다. 경고가 필요할 때만 echo가 나오게 만들면 알림 피로를 줄일 수 있습니다.

5. 실패 알림 점검

cron 결과가 오지 않을 때는 작업 내용보다 전달 경로를 우선 확인합니다.

hermes gateway status
hermes send --to telegram "deliver check"
hermes cron list

위 3개가 모두 정상인데도 알림이 오지 않으면 --deliver 값이 현재 환경과 맞는지 확인합니다. 현재 대화가 시작된 채널로 돌려보내는 작업은 origin을 사용할 수 있습니다.

hermes cron create --deliver origin "0 9 * * *" "오늘 확인할 서버 상태를 요약해줘"

운영 서버처럼 항상 같은 채널로 보내야 한다면 telegram:<chat_id>를 명시하는 방식이 더 안전합니다.

주요 오류 및 해결 방안

Telegram 메시지가 오지 않음: 제 경우 원인은 대부분 TELEGRAM_HOME_CHANNEL 값이 비어 있거나, 그룹방 ID 대신 사용자 ID를 넣은 경우였습니다. hermes send --to telegram "test"가 도착하는지 바로 확인합니다.

cron 작업은 보이는데 실행되지 않음: hermes cron status로 scheduler 상태를 확인합니다. 서비스형으로 운영한다면 실행 계정이 같은 Hermes 홈을 보는지도 확인해야 합니다.

스크립트 알림이 너무 자주 옴: --no-agent 스크립트는 stdout이 있으면 그대로 보냅니다. 정상 상태에서는 아무것도 출력하지 않고, 문제가 있을 때만 echo하도록 작성합니다.

작업이 너무 많은 내용을 보냄: 프롬프트에 짧게, 중지된 항목만, 위험한 항목만 같은 조건을 넣습니다. 서버 점검은 전체 로그보다 예외 항목만 받는 방식이 유지하기 좋습니다.

확인

마지막으로 아래 명령을 실행합니다.

hermes cron create --deliver telegram "every 1h" "서버 상태를 짧게 점검하고 이상한 항목만 알려줘"
hermes cron list
hermes cron status

Telegram에 결과가 도착하고 목록에서 작업이 보이면 정상적으로 등록된 것입니다.

반응형
Comments