
Cron trong Hermes Agent là bộ hẹn giờ cho trợ lý AI: bạn mô tả việc cần làm và lịch chạy, đến giờ hệ thống gọi agent làm việc đó rồi tự gửi kết quả đi. Câu hỏi hay gặp nhất — hermes agent cron gửi kết quả về đâu — có câu trả lời ngắn: trên nền tảng nhắn tin mặc định là "origin" (đúng cuộc trò chuyện đã tạo job), còn trên CLI mặc định là "local", tức lưu file trong ~/.hermes/cron/output/; bạn có thể đổi sang Telegram hoặc gửi nhiều kênh cùng lúc. Bài này dành cho người đã có Hermes chạy trên VPS hoặc máy luôn bật: tạo job đầu tiên, chỉnh múi giờ, chọn model và tự chẩn đoán khi job im lặng.
Cron trong Hermes Agent làm được gì cho công việc văn phòng?
Cron cho phép bạn đặt một việc chạy một lần hoặc lặp lại theo lịch, gắn kèm một hay nhiều skill, rồi gửi kết quả về đúng nơi bạn chỉ định. Nếu việc đó không cần AI suy nghĩ, bạn còn có thể cho job chạy thuần script — không tốn token, không gọi model.
Ba ví dụ rất đời thường ở doanh nghiệp Việt:
- 7h00 mỗi sáng: tóm tắt đơn hàng hôm qua từ file
don_hang(các cộtma_don,khach,tong_tien,trang_thai) và gửi về nhóm kinh doanh. - 16h30 mỗi chiều: nhắc danh sách công nợ đến hạn trong 3 ngày tới để kế toán gọi khách trước khi hết giờ làm.
- Sáng thứ Hai: báo cáo mặt hàng tồn kho dưới định mức để bộ phận mua hàng kịp đặt bổ sung.
Điểm khác biệt so với một lịch chạy script thông thường: đầu ra là văn bản do agent viết, nên bạn nhận được một đoạn tóm tắt đọc hiểu ngay, thay vì một bảng số thô. Đổi lại, mỗi lần chạy là một lần gọi model — phần chi phí tôi sẽ nói ở mục dưới. Nếu bạn còn đang phân vân nên giao việc gì cho trợ lý AI trước, danh sách 8 việc doanh nghiệp nhỏ giao cho trợ lý AI là chỗ bắt đầu hợp lý.
Tạo hermes agent cron job đầu tiên bằng ba cách
Có ba đường để tạo một hermes agent cron job: nói bằng lời trong chat, dùng lệnh /cron ngay trong khung chat, hoặc dùng CLI.
- Nói bằng lời. Bạn nhắn với agent kiểu tự nhiên: «mỗi sáng 7 giờ tóm tắt đơn hàng hôm qua và gửi tôi trên Telegram». Agent sẽ tự dựng job. Cách này nhanh nhưng bạn nên kiểm tra lại lịch và đích gửi sau đó, vì cách hiểu của agent về «mỗi sáng» chưa chắc trùng ý bạn.
- Lệnh trong chat. Ví dụ trong tài liệu:
/cron add "every 2h" "Check server status". Cấu trúc rất dễ nhớ: lịch trước, việc sau. - Dòng lệnh.
hermes cron create "every 1h" "Summarize new feed items" --skill blogwatcher. Tuỳ chọn--skillgiúp job chạy theo một quy trình bạn đã viết sẵn thay vì để agent tự ứng biến — nếu chưa quen phần này, xem bài tự viết SKILL.md và cài skill cho Hermes Agent.
Với job quan trọng, tôi khuyên tạo ở trạng thái tạm dừng rồi mới duyệt: hermes cron create "every 1h" "Post the digest" --paused --paused-reason "Awaiting review", chạy thử bằng tay, thấy nội dung đúng thì mới hermes cron resume <job_id>. Danh sách job được lưu tại ~/.hermes/cron/jobs.json.
Cú pháp lịch chạy và múi giờ: vì sao báo cáo 7h lại đến lúc 14h?
Vì cron chạy theo múi giờ của máy đang chạy scheduler, mà VPS thì thường để sẵn UTC. Đặt «7h» trên một VPS UTC nghĩa là 14h giờ Việt Nam — đây là lỗi phổ biến nhất khi người dùng Việt mới làm quen với cron.
| Kiểu lịch | Ví dụ | Ý nghĩa |
|---|---|---|
| Một lần, tính từ bây giờ | in 30m | Chạy sau 30 phút rồi kết thúc |
| Lặp theo chu kỳ | every 2h | Cứ 2 tiếng chạy một lần |
| Lặp theo chu kỳ ngắn | every 5m | Hợp với job giám sát, nên dùng kèm chế độ không gọi model |
| Hằng ngày theo giờ | every day at 9am | 9h sáng mỗi ngày |
| Chỉ ngày làm việc | weekdays at 9am | Thứ Hai đến thứ Sáu |
| Biểu thức cron chuẩn | 0 9 * * 1-5 | Dạng quen thuộc với người làm kỹ thuật |
Để sửa lệch giờ, bạn đặt khoá timezone: trong cấu hình bằng tên IANA; mặc định khoá này để rỗng, nghĩa là lấy giờ máy chủ. Biến môi trường HERMES_TIMEZONE sẽ ghi đè giá trị trong file cấu hình. Với doanh nghiệp Việt, giá trị IANA tương ứng là Asia/Ho_Chi_Minh — tài liệu chính thức chỉ nêu ví dụ khác, nên bạn đặt xong hãy tạo một job thử chạy sau vài phút để xác nhận giờ đã đúng. Cú pháp lịch còn vài dạng khác nữa, bạn nên đối chiếu trang tài liệu cron chính thức trước khi dựng lịch phức tạp.
Cron của Hermes gửi kết quả về đâu?
Kết quả đi theo giá trị bạn đặt ở đích gửi (deliver). Điểm quan trọng nhất cần nhớ: câu trả lời cuối cùng của agent được scheduler tự gửi đi, nên trong nội dung job bạn không cần dặn agent «hãy gửi tin nhắn cho tôi» — cứ viết rõ cần tóm tắt cái gì là đủ.
| Giá trị | Kết quả đi về đâu | Khi nào dùng |
|---|---|---|
"origin" | Đúng cuộc trò chuyện đã tạo job; mặc định trên nền tảng nhắn tin | Job cá nhân, bạn tự đọc |
"local" | Lưu file trong ~/.hermes/cron/output/; mặc định trên CLI | Job kỹ thuật, muốn giữ lịch sử trên máy |
"telegram" | Kênh nhà cấu hình qua TELEGRAM_HOME_CHANNEL | Báo cáo cho một nhóm cố định |
"all" | Tất cả kênh đang bật | Cảnh báo sự cố cần ai cũng thấy |
"origin,all" | Nhiều đích, ngăn cách bằng dấu phẩy | Vừa lưu vừa phát |
Hai hành vi nên biết để không bị spam. Thứ nhất, nếu câu trả lời của agent có [SILENT] thì hệ thống không gửi đi, nhưng vẫn lưu lại bản cục bộ — rất hợp với job kiểu «có gì bất thường thì báo, không thì thôi». Thứ hai, job bị lỗi thì luôn được gửi, kể cả khi bạn đặt im lặng; đó là chủ ý thiết kế để bạn không bỏ sót job hỏng.

Chọn model và kiểm soát chi phí cho job hẹn giờ
Model dùng cho một job được chọn theo thứ tự ưu tiên: model ghim riêng cho job đó, rồi đến cron.model trong config.yaml, cuối cùng mới là model chính đang dùng lúc job chạy. Bạn ghim model riêng bằng hermes cron edit <job_id> --pin, hoặc đặt model chung cho mọi job bằng hermes config set cron.model <model>.
Nguyên tắc thực dụng tôi hay áp dụng: việc tóm tắt, viết báo cáo cho người đọc thì dùng model tốt; việc kiểm tra tình trạng máy chủ hay đếm số dòng thì đừng gọi model làm gì. Hermes có chế độ không dùng agent cho đúng tình huống đó:
hermes cron create "every 5m" --no-agent --script memory-watchdog.sh --deliver telegram --name "memory-watchdog"
Script phải nằm trong $HERMES_HOME/scripts/. Job kiểu này không tốn token, không gọi model — hợp với kiểm tra dung lượng ổ đĩa, ping website, theo dõi bộ nhớ.
Ngoài ra còn một lớp bảo vệ nữa: hệ thống kiểm tra cấu hình trước khi chạy. Nếu cấu hình sai, job chuyển last_status sang blocked_config, gửi một cảnh báo duy nhất và không gọi LLM — tức là job sai cấu hình sẽ không âm thầm đốt token mỗi giờ. Bạn có thể tắt lớp kiểm tra này bằng cron.preflight: false, nhưng tôi không thấy lý do nào đáng để tắt.
Hermes agent cron not working: checklist 7 bước
Khi gặp tình huống hermes agent cron not working — job tạo rồi mà đến giờ không thấy gì — hãy đi tuần tự 7 bước sau, từ nguyên nhân phổ biến nhất xuống:
- Gateway có đang chạy không? Đây là nguyên nhân số một. Cron do gateway thực thi, tick mỗi 60 giây; một phiên chat CLI thông thường không tự chạy cron. Trên máy luôn bật, bạn cài gateway bằng
hermes gateway install, hoặc trên Linux muốn nó tự lên khi khởi động máy thì dùngsudo hermes gateway install --system; muốn chạy nổi để quan sát thìhermes gateway. Nếu bạn đang cân nhắc máy chủ để chạy thường trực, bài cấu hình VPS cho người mới giúp bạn khỏi mua dư. - Job đang ở trạng thái nào? Xem lại danh sách job: job
[paused]sẽ không chạy, job một lần đã[completed]thì không chạy nữa. - Lịch có đúng cú pháp không? Một chuỗi lịch viết sai dễ bị hiểu thành thời điểm khác hẳn ý bạn.
- Múi giờ. Quay lại mục trên: job vẫn chạy đúng giờ máy chủ, chỉ là không trùng giờ Việt Nam.
- Đích gửi có đúng và có quyền không? Token còn hiệu lực chứ? Với nhóm Telegram, bot phải là thành viên quản trị của nhóm thì mới gửi được.
- Skill đã cài trên đúng máy chưa? Job cần skill nào thì skill đó phải có trên máy đang chạy scheduler, không phải trên laptop bạn ngồi gõ lệnh.
- Job bị treo. Có giới hạn thời gian không hoạt động, mặc định 600 giây, đổi bằng biến
HERMES_CRON_TIMEOUT(đặt0là không giới hạn). Trường hợp khác: hai gateway cùng chạy và tranh khoá của nhau — nếu bạn lỡ vừa cài dịch vụ nền vừa mở gateway thủ công thì kiểm tra lại.
Một chi tiết nữa khiến nhiều người tưởng job hỏng: trong job cron, bộ công cụ cronjob, messaging và clarify bị tắt. Nghĩa là agent trong job không thể hỏi lại bạn cho rõ và không tự gửi tin theo kiểu nhắn tay — nó chỉ trả lời, phần gửi do scheduler lo. Vậy nên prompt của job phải đủ rõ để không cần hỏi lại.
Lệnh chẩn đoán nhanh
Thay vì đoán, hãy để Hermes tự nói cho bạn biết nó đang nghĩ gì:
hermes cron status— scheduler còn sống không, job nào đang quá hạn.hermes cron doctor— rà toàn bộ job, chỉ đọc nên chạy lúc nào cũng an toàn; còn lỗi thì lệnh thoát với mã 1.hermes cron tick— ép một nhịp chạy ngay để thử, không cần chờ đến giờ.- Xem nhật ký tại
~/.hermes/logs/agent.logkhi hai lệnh trên vẫn chưa đủ.
Nếu muốn đi sâu hơn, hướng dẫn xử lý sự cố cron của nhà phát triển liệt kê đầy đủ các tình huống.
Lưu ý an toàn khi để agent tự chạy theo lịch
Một agent chạy khi bạn ngủ là tiện, nhưng cũng là lúc bạn không giám sát được. Mặc định Hermes đặt approvals.cron_mode: deny, tức job cron gặp lệnh nguy hiểm thì từ chối luôn thay vì chờ duyệt. Giá trị còn lại là approve, nhưng tôi không khuyên đổi: không có ai ngồi đó để bấm duyệt lúc 3 giờ sáng cả. Chi tiết nằm trong tài liệu bảo mật của Hermes.
Vài thói quen nên có:
- Job mới tạo ở trạng thái
--paused, chạy thử bằng tay vài lần rồi mới resume. - Đừng để job mới gửi thẳng vào nhóm đông người. Cho nó gửi riêng cho bạn vài ngày, đọc xem nội dung có đáng tin không đã.
- Sao lưu
config.yamltrước mỗi lần sửa — đặc biệt khi đổicron.modelhay múi giờ.
Ở một công ty phân phối phụ kiện nội thất tôi đang điều hành, tôi cho 4 profile Hermes chạy trên cùng một VPS Linux, mỗi profile có cron riêng; profile «trợ lý sản phẩm nội bộ» có cron chạy định kỳ phục vụ nhóm bán hàng. Lệnh của agent — kể cả lệnh phát sinh trong job hẹn giờ — chạy trong container Docker chứ không chạy thẳng trên máy chủ. Và tôi luôn sao lưu config.yaml trước mỗi lần vá; bạn cũng nên làm vậy trước khi đụng vào cấu hình cron.
Tóm tắt và bước tiếp theo
Ba ý cần nhớ: cron do gateway thực thi (không có gateway thì không có job nào chạy); kết quả đi theo đích gửi, mặc định là "origin" trên nền tảng nhắn tin và "local" trên CLI; và khi job im lặng thì đi lần lượt 7 bước ở trên thay vì xoá job làm lại.
Việc nên làm ngay hôm nay, trong khoảng 20 phút: (1) kiểm tra gateway đã cài chạy nền chưa; (2) đặt múi giờ theo tên IANA và tạo một job thử chạy sau 5 phút để xác nhận giờ đúng; (3) tạo job báo cáo thật ở trạng thái tạm dừng, chạy thử, đọc kỹ nội dung rồi mới resume; (4) chạy hermes cron doctor mỗi khi thấy có gì lạ.
Đọc thêm: Hermes Agent use cases — 8 việc doanh nghiệp nhỏ giao cho trợ lý AI để chọn job đáng hẹn giờ đầu tiên, và Hermes Agent Zalo: 2 cách nối AI agent với Zalo và rủi ro khoá nick nếu đội của bạn không dùng Telegram.
Câu hỏi thường gặp
›Cron của Hermes gửi kết quả về đâu?
Kết quả đi theo đích gửi (deliver) của job. Trên nền tảng nhắn tin, mặc định là "origin" — tức đúng cuộc trò chuyện nơi bạn tạo job; trên CLI, mặc định là "local", lưu file trong ~/.hermes/cron/output/. Bạn có thể đổi sang "telegram" (dùng kênh nhà cấu hình qua TELEGRAM_HOME_CHANNEL), "all", hoặc ghép nhiều đích cách nhau bằng dấu phẩy như "origin,all".
›Tắt laptop thì cron của Hermes có chạy không?
Không. Cron do gateway thực thi với nhịp kiểm tra mỗi 60 giây, nên máy phải bật và gateway phải đang chạy. Vì vậy các job báo cáo định kỳ nên đặt trên VPS hoặc một máy luôn bật, cài bằng hermes gateway install, hoặc trên Linux dùng sudo hermes gateway install --system để gateway tự khởi động cùng máy.
›Vì sao job báo chạy xong mà không thấy tin nhắn?
Hai khả năng hay gặp nhất. Một là câu trả lời của agent chứa [SILENT] nên hệ thống cố ý không gửi đi, dù vẫn lưu bản cục bộ. Hai là đích gửi chưa đúng hoặc chưa đủ quyền — với nhóm Telegram, bot phải là quản trị viên của nhóm. Chạy hermes cron doctor để rà lại toàn bộ job, lệnh này chỉ đọc nên an toàn.
›Job cron có tốn token khi không có gì mới không?
Có, vì agent vẫn phải chạy để biết là không có gì mới — trừ khi bạn dùng chế độ --no-agent chạy thuần script, khi đó không gọi model nên không tốn token. Ngoài ra, nếu cấu hình sai thì job chuyển trạng thái blocked_config, gửi một cảnh báo duy nhất và không gọi LLM, nên job hỏng sẽ không âm thầm đốt token.
›Làm sao thử job cron ngay mà không phải chờ đến giờ?
Dùng hermes cron tick để ép một nhịp chạy ngay lập tức. Với job quan trọng, cách an toàn là tạo job ở trạng thái tạm dừng bằng --paused kèm --paused-reason, chạy thử và đọc kỹ nội dung đầu ra, rồi mới hermes cron resume <job_id> để cho job chạy thật.
Tác giả
Chuyên gia chuyển đổi số · Đại diện 5F Edu
Hơn 8 năm triển khai và tư vấn chuyển đổi số cho doanh nghiệp vừa và nhỏ: chuẩn hoá quy trình, xây phần mềm quản lý bằng AppSheet và web app, tự động hoá bằng N8N. Người làm kênh YouTube Nghiện AppSheet.



