Chuyển tới nội dung chính

Xử lý sự cố Cron

Khi một cron job không hoạt động như mong đợi, hãy kiểm tra theo thứ tự các bước sau. Hầu hết các sự cố thuộc một trong bốn loại: thời gian, gửi, quyền hoặc tải kỹ năng.


Job không chạy

Kiểm tra 1: Xác minh job tồn tại và đang hoạt động

hermes cron list

Tìm job và xác nhận trạng thái là [active] (không phải [paused] hoặc [completed]). Nếu hiển thị [completed], số lần lặp có thể đã hết — chỉnh sửa job để đặt lại.

Kiểm tra 2: Xác nhận lịch trình đúng

Lịch trình định dạng sai sẽ mặc định thành chạy một lần hoặc bị từ chối hoàn toàn. Kiểm tra biểu thức:

Biểu thứcKết quả mong đợi
0 9 * * *9:00 sáng mỗi ngày
0 9 * * 19:00 sáng mỗi thứ Hai
every 2hMỗi 2 giờ từ bây giờ
30m30 phút kể từ bây giờ
2025-06-01T09:00:001/6/2025 lúc 9:00 UTC

Nếu job chạy một lần rồi biến mất khỏi danh sách, đó là lịch trình chạy một lần (30m, 1d, hoặc timestamp ISO) — đây là hành vi mong đợi.

Kiểm tra 3: Gateway có đang chạy không?

Cron job được kích hoạt bởi luồng ticker nền của gateway, tick mỗi 60 giây. Phiên chat CLI thông thường không tự động kích hoạt cron job.

Nếu bạn mong đợi job chạy tự động, bạn cần gateway đang chạy (hermes gateway hoặc hermes serve). Để gỡ lỗi một lần, bạn có thể kích hoạt tick thủ công bằng hermes cron tick.

Kiểm tra 4: Kiểm tra đồng hồ hệ thống và múi giờ

Job sử dụng múi giờ cục bộ. Nếu đồng hồ máy bị sai hoặc ở múi giờ khác mong đợi, job sẽ chạy vào thời điểm sai. Kiểm tra:

date
hermes cron list # So sánh thời gian next_run với giờ cục bộ

Lỗi gửi

Kiểm tra 1: Xác minh đích gửi đúng

Đích gửi phân biệt chữ hoa chữ thường và yêu cầu nền tảng tương ứng phải được cấu hình. Đích cấu hình sai sẽ bỏ qua phản hồi một cách im lặng.

ĐíchYêu cầu
telegramTELEGRAM_BOT_TOKEN trong ~/.hermes/.env
discordDISCORD_BOT_TOKEN trong ~/.hermes/.env
slackSLACK_BOT_TOKEN trong ~/.hermes/.env
whatsappGateway WhatsApp đã cấu hình
signalGateway Signal đã cấu hình
matrixHomeserver Matrix đã cấu hình
emailSMTP đã cấu hình trong config.yaml
smsNhà cung cấp SMS đã cấu hình
localQuyền ghi vào ~/.hermes/cron/output/
originGửi đến chat nơi job được tạo

Các nền tảng được hỗ trợ khác bao gồm mattermost, homeassistant, dingtalk, feishu, wecom, weixin, bluebubbles, qqbotwebhook. Bạn cũng có thể nhắm vào chat cụ thể bằng cú pháp platform:chat_id (ví dụ telegram:-1001234567890).

Nếu gửi thất bại, job vẫn chạy — chỉ là không gửi đi đâu cả. Kiểm tra hermes cron list để xem trường last_error (nếu có).

Kiểm tra 2: Kiểm tra cách sử dụng [SILENT]

Nếu cron job không tạo đầu ra hoặc agent phản hồi bằng [SILENT], việc gửi sẽ bị bỏ qua. Điều này là có chủ đích cho các job giám sát — nhưng hãy đảm bảo prompt của bạn không vô tình bỏ qua mọi thứ.

Prompt nói "respond with [SILENT] if nothing changed" sẽ nuốt cả các phản hồi không trống. Kiểm tra logic điều kiện của bạn.

Kiểm tra 3: Quyền token nền tảng

Bot của mỗi nền tảng nhắn tin cần quyền cụ thể để nhận tin nhắn. Nếu gửi thất bại im lặng:

  • Telegram: Bot phải là admin trong nhóm/kênh đích
  • Discord: Bot phải có quyền gửi trong kênh đích
  • Slack: Bot phải được thêm vào workspace và có scope chat:write

Kiểm tra 4: Bọc phản hồi

Mặc định, phản hồi cron được bọc với header và footer (cron.wrap_response: true trong config.yaml). Một số nền tảng hoặc tích hợp có thể không xử lý tốt điều này. Để tắt:

cron:
wrap_response: false

Lỗi tải kỹ năng

Kiểm tra 1: Xác minh kỹ năng đã được cài đặt

hermes skills list

Kỹ năng phải được cài đặt trước khi có thể gắn vào cron job. Nếu thiếu kỹ năng, hãy cài đặt trước bằng hermes skills install <skill-name> hoặc qua /skills trong CLI.

Kiểm tra 2: Kiểm tra tên kỹ năng so với tên thư mục

Tên kỹ năng phân biệt chữ hoa chữ thường và phải khớp với tên thư mục của kỹ năng đã cài. Nếu job chỉ định ai-funding-daily-report nhưng thư mục kỹ năng là tên khác, xác nhận tên chính xác từ hermes skills list.

Kiểm tra 3: Kỹ năng yêu cầu công cụ tương tác

Cron job chạy với các toolset cronjob, messagingclarify bị tắt. Điều này ngăn tạo cron đệ quy, gửi tin nhắn trực tiếp (việc gửi do bộ lập lịch xử lý) và prompt tương tác. Nếu kỹ năng phụ thuộc vào các toolset này, nó sẽ không hoạt động trong ngữ cảnh cron.

Kiểm tra tài liệu của kỹ năng để xác nhận nó hoạt động trong chế độ không tương tác (headless).

Kiểm tra 4: Thứ tự đa kỹ năng

Khi sử dụng nhiều kỹ năng, chúng tải theo thứ tự. Nếu Kỹ năng A phụ thuộc vào ngữ cảnh từ Kỹ năng B, đảm bảo B tải trước:

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

Trong ví dụ này, context-skill tải trước target-skill.


Lỗi và sự cố Job

Kiểm tra 1: Xem kết quả job gần đây

Nếu job chạy và thất bại, bạn có thể thấy ngữ cảnh lỗi tại:

  1. Chat nơi job gửi (nếu gửi thành công)
  2. ~/.hermes/logs/agent.log cho tin nhắn bộ lập lịch (hoặc errors.log cho cảnh báo)
  3. Metadata last_run của job qua hermes cron list

Kiểm tra 2: Các mẫu lỗi thường gặp

"No such file or directory" cho scripts Đường dẫn script phải là đường dẫn tuyệt đối (hoặc tương đối so với thư mục cấu hình Hermes). Kiểm tra:

ls ~/.hermes/scripts/your-script.py   # Phải tồn tại
hermes cron edit <job_id> --script ~/.hermes/scripts/your-script.py

"Skill not found" khi thực thi job Kỹ năng phải được cài đặt trên máy chạy bộ lập lịch. Nếu bạn chuyển giữa các máy, kỹ năng không tự động đồng bộ — cài đặt lại bằng hermes skills install <skill-name>.

Job chạy nhưng không gửi gì Có thể là vấn đề đích gửi (xem Lỗi gửi ở trên) hoặc phản hồi bị bỏ qua im lặng ([SILENT]).

Job treo hoặc timeout Bộ lập lịch sử dụng timeout dựa trên không hoạt động (mặc định 600 giây, cấu hình qua biến môi trường HERMES_CRON_TIMEOUT, 0 cho không giới hạn). Agent có thể chạy miễn là đang gọi công cụ — timer chỉ kích hoạt sau khi không hoạt động kéo dài. Job chạy lâu nên sử dụng script để thu thập dữ liệu và chỉ gửi kết quả.

Kiểm tra 3: Tranh chấp khóa

Bộ lập lịch sử dụng khóa dựa trên file để ngăn tick chồng chéo. Nếu hai instance gateway đang chạy (hoặc phiên CLI xung đột với gateway), job có thể bị trì hoãn hoặc bỏ qua.

Tắt các tiến trình gateway trùng lặp:

ps aux | grep hermes
# Tắt các tiến trình trùng, chỉ giữ một

Kiểm tra 4: Quyền trên jobs.json

Job được lưu trong ~/.hermes/cron/jobs.json. Nếu file này không thể đọc/ghi bởi user của bạn, bộ lập lịch sẽ thất bại im lặng:

ls -la ~/.hermes/cron/jobs.json
chmod 600 ~/.hermes/cron/jobs.json # User của bạn nên sở hữu nó

Vấn đề hiệu suất

Khởi động job chậm

Mỗi cron job tạo phiên AIAgent mới, có thể liên quan đến xác thực nhà cung cấp và tải model. Với lịch trình nhạy cảm thời gian, hãy thêm thời gian đệm (ví dụ 0 8 * * * thay vì 0 9 * * *).

Quá nhiều job chồng chéo

Bộ lập lịch thực thi job tuần tự trong mỗi tick. Nếu nhiều job đến hạn cùng lúc, chúng chạy lần lượt. Hãy cân nhắc dàn đều lịch (ví dụ 0 9 * * *5 9 * * * thay vì cả hai lúc 0 9 * * *) để tránh trì hoãn.

Đầu ra script lớn

Script xuất ra hàng megabyte dữ liệu sẽ làm chậm agent và có thể vượt giới hạn token. Lọc/tóm tắt ở cấp script — chỉ xuất ra những gì agent cần để phân tích.


Lệnh chẩn đoán

hermes cron list                    # Hiển thị tất cả job, trạng thái, thời gian next_run
hermes cron run <job_id> # Lên lịch cho tick tiếp theo (để kiểm thử)
hermes cron edit <job_id> # Sửa vấn đề cấu hình
hermes logs # Xem nhật ký Hermes gần đây
hermes skills list # Xác minh kỹ năng đã cài

Nhận thêm trợ giúp

Nếu bạn đã làm qua hướng dẫn này mà sự cố vẫn còn:

  1. Chạy job bằng hermes cron run <job_id> (kích hoạt ở tick gateway tiếp theo) và theo dõi lỗi trong đầu ra chat
  2. Kiểm tra ~/.hermes/logs/agent.log để tìm tin nhắn bộ lập lịch và ~/.hermes/logs/errors.log để tìm cảnh báo
  3. Mở issue tại github.com/NousResearch/hermes-agent với:
    • ID job và lịch trình
    • Đích gửi
    • Mong đợi gì so với thực tế
    • Tin nhắn lỗi liên quan từ nhật ký

Để xem tham chiếu cron đầy đủ, xem Tự động hóa mọi thứ với CronTác vụ lên lịch (Cron).