docs/docs/th/cli/cron.md
2026-05-02 10:35:14 +00:00

22 KiB

read_when summary title x-i18n
คุณต้องการงานตามกำหนดเวลาและการปลุก
คุณกำลังดีบักการเรียกใช้งาน Cron และล็อก
CLI reference สำหรับ `openclaw cron` (ตั้งเวลาและเรียกใช้งานพื้นหลัง) Cron
generated_at model provider source_hash source_path workflow
2026-05-02T10:10:45Z gpt-5.5 openai 298ac3fc868462eb301febbc1aa5296d8087cad7fdc466870487081444c5856f cli/cron.md 16

openclaw cron

จัดการงาน Cron สำหรับตัวจัดกำหนดการของ Gateway

รัน `openclaw cron --help` เพื่อดูพื้นผิวคำสั่งทั้งหมด ดู [งาน Cron](/th/automation/cron-jobs) สำหรับคู่มือเชิงแนวคิด

เซสชัน

--session รับค่า main, isolated, current หรือ session:<id>

- `main` ผูกกับเซสชันหลักของเอเจนต์ - `isolated` สร้างทรานสคริปต์และ ID เซสชันใหม่สำหรับการรันแต่ละครั้ง - `current` ผูกกับเซสชันที่ใช้งานอยู่ ณ เวลาที่สร้าง - `session:` ปักหมุดกับคีย์เซสชันถาวรที่ระบุอย่างชัดเจน การรันแบบแยกจะรีเซ็ตบริบทการสนทนาแวดล้อม การกำหนดเส้นทางช่องทางและกลุ่ม นโยบายส่ง/เข้าคิว การยกระดับ จุดกำเนิด และการผูก ACP runtime จะถูกรีเซ็ตสำหรับการรันใหม่ ค่ากำหนดที่ปลอดภัยและโมเดลที่ผู้ใช้เลือกอย่างชัดเจนหรือการแทนที่การยืนยันตัวตนสามารถคงข้ามการรันได้

การส่ง

openclaw cron list และ openclaw cron show <job-id> แสดงตัวอย่างเส้นทางการส่งที่แก้ค่าแล้ว สำหรับ channel: "last" ตัวอย่างจะแสดงว่าเส้นทางถูกแก้ค่าจากเซสชันหลักหรือเซสชันปัจจุบัน หรือจะล้มเหลวแบบปิด

เป้าหมายที่มีคำนำหน้าผู้ให้บริการสามารถช่วยแยกแยะช่องทางประกาศที่ยังแก้ค่าไม่ได้ ตัวอย่างเช่น to: "telegram:123" เลือก Telegram เมื่อ delivery.channel ถูกละไว้หรือเป็น last เฉพาะคำนำหน้าที่ Plugin ที่โหลดประกาศไว้เท่านั้นที่เป็นตัวเลือกผู้ให้บริการ หาก delivery.channel ระบุชัดเจน คำนำหน้าต้องตรงกับช่องทางนั้น channel: "whatsapp" กับ to: "telegram:123" จะถูกปฏิเสธ คำนำหน้าบริการ เช่น imessage: และ sms: ยังคงเป็นไวยากรณ์เป้าหมายที่ช่องทางเป็นเจ้าของ

งาน `cron add` แบบแยกใช้การส่งแบบ `--announce` เป็นค่าเริ่มต้น ใช้ `--no-deliver` เพื่อเก็บเอาต์พุตไว้ภายใน `--deliver` ยังคงอยู่ในฐานะนามแฝงที่เลิกใช้แล้วของ `--announce`

ความเป็นเจ้าของการส่ง

การส่งแชต Cron แบบแยกถูกแบ่งความรับผิดชอบระหว่างเอเจนต์และตัวรัน:

  • เอเจนต์สามารถส่งโดยตรงด้วยเครื่องมือ message เมื่อมีเส้นทางแชต
  • announce จะส่งสำรองเฉพาะการตอบกลับสุดท้ายเมื่อเอเจนต์ไม่ได้ส่งโดยตรงไปยังเป้าหมายที่แก้ค่าแล้ว
  • webhook โพสต์เพย์โหลดที่เสร็จแล้วไปยัง URL
  • none ปิดใช้งานการส่งสำรองของตัวรัน

--announce คือการส่งสำรองของตัวรันสำหรับการตอบกลับสุดท้าย --no-deliver ปิดใช้งานการส่งสำรองนั้น แต่ไม่ได้ลบเครื่องมือ message ของเอเจนต์เมื่อมีเส้นทางแชต

การเตือนความจำที่สร้างจากแชตที่ใช้งานอยู่จะรักษาเป้าหมายการส่งแชตสดไว้สำหรับการส่งประกาศสำรอง คีย์เซสชันภายในอาจเป็นตัวพิมพ์เล็ก อย่าใช้เป็นแหล่งข้อมูลจริงสำหรับ ID ผู้ให้บริการที่ไวต่อรูปแบบตัวพิมพ์ เช่น ID ห้อง Matrix

การส่งเมื่อเกิดความล้มเหลว

การแจ้งเตือนความล้มเหลวแก้ค่าตามลำดับนี้:

  1. delivery.failureDestination บนงาน
  2. cron.failureDestination ส่วนกลาง
  3. เป้าหมายประกาศหลักของงาน (เมื่อไม่ได้ตั้งค่าปลายทางความล้มเหลวอย่างชัดเจน)
งานเซสชันหลักใช้ `delivery.failureDestination` ได้เฉพาะเมื่อโหมดการส่งหลักเป็น `webhook` งานแบบแยกรับค่านี้ได้ในทุกโหมด

หมายเหตุ: การรัน Cron แบบแยกถือว่าความล้มเหลวของเอเจนต์ระดับการรันเป็นข้อผิดพลาดของงาน แม้เมื่อไม่มีเพย์โหลดตอบกลับถูกสร้างขึ้น ดังนั้นความล้มเหลวของโมเดล/ผู้ให้บริการยังคงเพิ่มตัวนับข้อผิดพลาดและทริกเกอร์การแจ้งเตือนความล้มเหลว

การกำหนดเวลา

งานแบบครั้งเดียว

--at <datetime> กำหนดเวลาการรันแบบครั้งเดียว วันที่เวลาที่ไม่มี offset จะถูกตีความเป็น UTC เว้นแต่คุณส่ง --tz <iana> ด้วย ซึ่งจะตีความเวลาตามนาฬิกาบนผนังในเขตเวลาที่กำหนด

งานแบบครั้งเดียวจะถูกลบหลังสำเร็จตามค่าเริ่มต้น ใช้ `--keep-after-run` เพื่อเก็บไว้

งานที่เกิดซ้ำ

งานที่เกิดซ้ำใช้การถอยกลับแบบเอ็กซ์โพเนนเชียลหลังเกิดข้อผิดพลาดต่อเนื่อง: 30s, 1m, 5m, 15m, 60m ตารางเวลาจะกลับสู่ปกติหลังการรันที่สำเร็จครั้งถัดไป

การรันที่ถูกข้ามถูกติดตามแยกจากข้อผิดพลาดการดำเนินการ การรันเหล่านี้ไม่กระทบการถอยกลับเพื่อ retry แต่ openclaw cron edit <job-id> --failure-alert-include-skipped สามารถเลือกให้การแจ้งเตือนความล้มเหลวรวมการแจ้งเตือนการรันที่ถูกข้ามซ้ำได้

สำหรับงานแบบแยกที่กำหนดเป้าหมายไปยังผู้ให้บริการโมเดลที่กำหนดค่าไว้ภายในเครื่อง Cron จะรัน preflight ผู้ให้บริการแบบเบาก่อนเริ่มเทิร์นของเอเจนต์ ผู้ให้บริการ api: "ollama" แบบ Loopback, เครือข่ายส่วนตัว และ .local จะถูกตรวจที่ /api/tags; ผู้ให้บริการที่เข้ากันได้กับ OpenAI ภายในเครื่อง เช่น vLLM, SGLang และ LM Studio จะถูกตรวจที่ /models หาก endpoint เข้าถึงไม่ได้ การรันจะถูกบันทึกเป็น skipped และ retry ในกำหนดการภายหลัง; endpoint ที่ตรงกันและตายแล้วจะถูกแคชเป็นเวลา 5 นาทีเพื่อหลีกเลี่ยงไม่ให้งานจำนวนมากถล่มเซิร์ฟเวอร์ภายในเครื่องเดียวกัน

หมายเหตุ: นิยามงาน Cron อยู่ใน jobs.json ส่วนสถานะ runtime ที่ค้างอยู่จะอยู่ใน jobs-state.json หาก jobs.json ถูกแก้ไขจากภายนอก Gateway จะโหลดตารางเวลาที่เปลี่ยนแล้วใหม่และล้างสล็อตค้างที่ล้าสมัย; การเขียนใหม่ที่เปลี่ยนเฉพาะรูปแบบจะไม่ล้างสล็อตค้าง

การรันด้วยตนเอง

openclaw cron run คืนค่าทันทีเมื่อการรันด้วยตนเองถูกเข้าคิว การตอบกลับที่สำเร็จมี { ok: true, enqueued: true, runId } ใช้ openclaw cron runs --id <job-id> เพื่อติดตามผลลัพธ์สุดท้าย

`openclaw cron run ` บังคับรันตามค่าเริ่มต้น ใช้ `--due` เพื่อคงพฤติกรรมเดิมที่ "รันเฉพาะเมื่อถึงกำหนด"

โมเดล

cron add|edit --model <ref> เลือกโมเดลที่อนุญาตสำหรับงาน

หากโมเดลไม่ได้รับอนุญาตหรือแก้ค่าไม่ได้ Cron จะทำให้การรันล้มเหลวด้วยข้อผิดพลาดการตรวจสอบอย่างชัดเจน แทนที่จะ fallback ไปยังเอเจนต์ของงานหรือการเลือกโมเดลเริ่มต้น

Cron --model เป็น รายการหลักของงาน ไม่ใช่การแทนที่ /model ของเซสชันแชต นั่นหมายความว่า:

  • fallback ของโมเดลที่กำหนดค่าไว้ยังคงมีผลเมื่อโมเดลงานที่เลือกไว้ล้มเหลว
  • fallbacks ในเพย์โหลดรายงานจะแทนที่รายการ fallback ที่กำหนดค่าไว้เมื่อมีอยู่
  • รายการ fallback รายงานที่ว่างเปล่า (fallbacks: [] ในเพย์โหลด/API ของงาน) ทำให้การรัน Cron เข้มงวด
  • เมื่องานมี --model แต่ไม่มีรายการ fallback ที่กำหนดค่าไว้ OpenClaw จะส่งการแทนที่ fallback แบบว่างอย่างชัดเจน เพื่อไม่ให้รายการหลักของเอเจนต์ถูกผนวกเป็นเป้าหมาย retry ที่ซ่อนอยู่

ลำดับความสำคัญของโมเดล Cron แบบแยก

Cron แบบแยกแก้ค่าโมเดลที่ใช้งานตามลำดับนี้:

  1. การแทนที่จาก Gmail-hook
  2. --model รายงาน
  3. การแทนที่โมเดลของเซสชัน Cron ที่จัดเก็บไว้ (เมื่อผู้ใช้เลือกไว้)
  4. การเลือกโมเดลของเอเจนต์หรือค่าเริ่มต้น

โหมดเร็ว

โหมดเร็วของ Cron แบบแยกตามการเลือกโมเดลสดที่แก้ค่าแล้ว ค่า config โมเดล params.fastMode มีผลตามค่าเริ่มต้น แต่การแทนที่ fastMode ของเซสชันที่จัดเก็บไว้ยังคงชนะ config

การ retry เมื่อสลับโมเดลสด

หากการรันแบบแยกโยน LiveSessionModelSwitchError Cron จะบันทึกผู้ให้บริการและโมเดลที่ถูกสลับแล้ว (และการแทนที่โปรไฟล์การยืนยันตัวตนที่ถูกสลับเมื่อมี) สำหรับการรันที่ใช้งานอยู่ก่อน retry ลูป retry ชั้นนอกถูกจำกัดไว้ที่การ retry การสลับสองครั้งหลังความพยายามแรก จากนั้นจะยกเลิกแทนที่จะวนลูปตลอดไป

เอาต์พุตการรันและการปฏิเสธ

การระงับการรับทราบที่ล้าสมัย

เทิร์น Cron แบบแยกระงับการตอบกลับที่เป็นเพียงการรับทราบที่ล้าสมัย หากผลลัพธ์แรกเป็นเพียงการอัปเดตสถานะชั่วคราวและไม่มีการรัน subagent สืบทอดที่รับผิดชอบคำตอบสุดท้าย Cron จะ prompt ซ้ำหนึ่งครั้งเพื่อขอผลลัพธ์จริงก่อนการส่ง

การระงับโทเค็นเงียบ

หากการรัน Cron แบบแยกคืนค่าเฉพาะโทเค็นเงียบ (NO_REPLY หรือ no_reply) Cron จะระงับทั้งการส่งออกโดยตรงและเส้นทางสรุปสำรองที่เข้าคิว ดังนั้นจะไม่มีอะไรถูกโพสต์กลับไปยังแชต

การปฏิเสธแบบมีโครงสร้าง

การรัน Cron แบบแยกจะให้ความสำคัญกับเมตาดาต้าการปฏิเสธการดำเนินการแบบมีโครงสร้างจากการรันที่ฝังไว้ก่อน จากนั้น fallback ไปยัง marker การปฏิเสธที่รู้จักในเอาต์พุตสุดท้าย เช่น SYSTEM_RUN_DENIED, INVALID_REQUEST และวลีปฏิเสธการผูก approval

cron list และประวัติการรันจะแสดงเหตุผลการปฏิเสธ แทนที่จะรายงานคำสั่งที่ถูกบล็อกเป็น ok

การเก็บรักษา

การเก็บรักษาและการตัดทิ้งถูกควบคุมใน config:

  • cron.sessionRetention (ค่าเริ่มต้น 24h) ตัดเซสชันการรันแบบแยกที่เสร็จแล้ว
  • cron.runLog.maxBytes และ cron.runLog.keepLines ตัด ~/.openclaw/cron/runs/<jobId>.jsonl

การย้ายงานเก่า

หากคุณมีงาน Cron จากก่อนรูปแบบการส่งและ store ปัจจุบัน ให้รัน `openclaw doctor --fix` Doctor จะปรับฟิลด์ Cron เก่าให้เป็นปกติ (`jobId`, `schedule.cron`, ฟิลด์การส่งระดับบนรวมถึง `threadId` เก่า, นามแฝงการส่ง `provider` ในเพย์โหลด) และย้ายงาน fallback Webhook แบบง่ายที่ใช้ `notify: true` ไปเป็นการส่ง Webhook อย่างชัดเจนเมื่อ `cron.webhook` ถูกกำหนดค่าไว้

การแก้ไขทั่วไป

อัปเดตการตั้งค่าการส่งโดยไม่เปลี่ยนข้อความ:

openclaw cron edit <job-id> --announce --channel telegram --to "123456789"

ปิดใช้งานการส่งสำหรับงานแบบแยก:

openclaw cron edit <job-id> --no-deliver

เปิดใช้งานบริบท bootstrap แบบเบาสำหรับงานแบบแยก:

openclaw cron edit <job-id> --light-context

ประกาศไปยังช่องทางที่ระบุ:

openclaw cron edit <job-id> --announce --channel slack --to "channel:C1234567890"

ประกาศไปยังหัวข้อฟอรัม Telegram:

openclaw cron edit <job-id> --announce --channel telegram --to "-1001234567890" --thread-id 42

สร้างงานแบบแยกพร้อมบริบท bootstrap แบบเบา:

openclaw cron add \
  --name "Lightweight morning brief" \
  --cron "0 7 * * *" \
  --session isolated \
  --message "Summarize overnight updates." \
  --light-context \
  --no-deliver

--light-context ใช้กับงาน agent-turn แบบแยกเท่านั้น สำหรับการรัน Cron โหมดเบาจะคงบริบท bootstrap ให้ว่างแทนที่จะฉีดชุด bootstrap ของ workspace ทั้งหมด

คำสั่งผู้ดูแลทั่วไป

การรันด้วยตนเองและการตรวจสอบ:

openclaw cron list
openclaw cron show <job-id>
openclaw cron run <job-id>
openclaw cron run <job-id> --due
openclaw cron runs --id <job-id> --limit 50

รายการ cron runs มี diagnostics การส่งพร้อมเป้าหมาย Cron ที่ตั้งใจไว้ เป้าหมายที่แก้ค่าแล้ว การส่งผ่านเครื่องมือ message การใช้ fallback และสถานะการส่งสำเร็จ

การกำหนดเป้าหมายเอเจนต์และเซสชันใหม่:

openclaw cron edit <job-id> --agent ops
openclaw cron edit <job-id> --clear-agent
openclaw cron edit <job-id> --session current
openclaw cron edit <job-id> --session "session:daily-brief"

openclaw cron add เตือนเมื่อ --agent ถูกละไว้ในงาน agent-turn และ fallback ไปยังเอเจนต์เริ่มต้น (main) ส่ง --agent <id> ขณะสร้างเพื่อปักหมุดเอเจนต์ที่ระบุ

การปรับแต่งการส่ง:

openclaw cron edit <job-id> --announce --channel slack --to "channel:C1234567890"
openclaw cron edit <job-id> --best-effort-deliver
openclaw cron edit <job-id> --no-best-effort-deliver
openclaw cron edit <job-id> --no-deliver

ที่เกี่ยวข้อง