---
read_when:
    - คุณต้องการงานตามกำหนดเวลาและการปลุกให้ทำงาน
    - คุณกำลังดีบักการทำงานของ Cron และล็อก
summary: เอกสารอ้างอิง CLI สำหรับ `openclaw cron` (กำหนดเวลาและเรียกใช้งานเบื้องหลัง)
title: Cron
x-i18n:
    generated_at: "2026-05-11T20:25:59Z"
    model: gpt-5.5
    provider: openai
    source_hash: ad261871e48704061be7147f0a2722001cdc7e95156c0dc44f46c41d7e415cc6
    source_path: cli/cron.md
    workflow: 16
---

# `openclaw cron`

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

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

## เซสชัน

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

<AccordionGroup>
  <Accordion title="คีย์เซสชัน">
    - `main` ผูกกับเซสชันหลักของเอเจนต์
    - `isolated` สร้างทรานสคริปต์และรหัสเซสชันใหม่สำหรับการรันแต่ละครั้ง
    - `current` ผูกกับเซสชันที่ใช้งานอยู่ ณ เวลาสร้าง
    - `session:<id>` ตรึงกับคีย์เซสชันถาวรที่ระบุอย่างชัดเจน

  </Accordion>
  <Accordion title="ความหมายของเซสชันแบบแยก">
    การรันแบบแยกจะรีเซ็ตบริบทการสนทนารอบข้าง การกำหนดเส้นทางช่องทางและกลุ่ม นโยบายส่ง/เข้าคิว การยกระดับ ต้นทาง และการผูกกับรันไทม์ ACP จะถูกรีเซ็ตสำหรับการรันใหม่ ค่ากำหนดที่ปลอดภัยและโมเดลที่ผู้ใช้เลือกอย่างชัดเจนหรือการแทนที่การยืนยันตัวตนสามารถส่งต่อข้ามการรันได้
  </Accordion>
</AccordionGroup>

## การส่งมอบ

`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:` ยังคงเป็นไวยากรณ์เป้าหมายที่ช่องเป็นเจ้าของ

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

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

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

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

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

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

### การส่งมอบเมื่อเกิดข้อผิดพลาด

การแจ้งเตือนข้อผิดพลาดจะถูกแก้ค่าตามลำดับนี้:

1. `delivery.failureDestination` ในงาน
2. `cron.failureDestination` ส่วนกลาง
3. เป้าหมายประกาศหลักของงาน (เมื่อไม่ได้ตั้งค่าปลายทางข้อผิดพลาดไว้อย่างชัดเจน)

<Note>
งานเซสชันหลักใช้ `delivery.failureDestination` ได้เฉพาะเมื่อโหมดการส่งมอบหลักเป็น `webhook` งานแบบแยกรับค่านี้ได้ในทุกโหมด
</Note>

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

หากการรันแบบแยกหมดเวลาก่อนคำขอโมเดลแรก `openclaw cron show`
และ `openclaw cron runs` จะรวมข้อผิดพลาดเฉพาะเฟส เช่น
`setup timed out before runner start` หรือ
`stalled before first model call (last phase: context-engine)`
สำหรับผู้ให้บริการที่อิง CLI ตัวเฝ้าระวังก่อนโมเดลจะยังทำงานอยู่จนกว่าเทิร์น CLI ภายนอก
จะเริ่มต้น ดังนั้นการติดขัดของการค้นหาเซสชัน hook การยืนยันตัวตน prompt และการตั้งค่า CLI
จะถูกรายงานเป็นความล้มเหลวของ Cron ก่อนโมเดล

## การจัดกำหนดการ

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

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

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

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

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

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

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

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

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

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

<Note>
`openclaw cron run <job-id>` บังคับรันโดยค่าเริ่มต้น ใช้ `--due` เพื่อคงพฤติกรรมเก่า "รันเฉพาะเมื่อถึงกำหนด" ไว้
</Note>

## โมเดล

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

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

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

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

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

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

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

### โหมดเร็ว

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

### การลองใหม่เมื่อสลับโมเดลสด

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ปิดการส่งมอบสำหรับงานแบบแยก:

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

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

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

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

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

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

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

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

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

`--light-context` ใช้กับงานเทิร์นเอเจนต์แบบแยกเท่านั้น สำหรับการรัน Cron โหมดเบาจะเก็บบริบทบูตสแตรปให้ว่างเปล่าแทนการฉีดชุดบูตสแตรปเวิร์กสเปซทั้งหมด

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

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

```bash
openclaw cron list
openclaw cron list --agent ops
openclaw cron get <job-id>
openclaw cron show <job-id>
openclaw cron run <job-id>
openclaw cron run <job-id> --due
openclaw cron runs --id <job-id> --limit 50
```

`openclaw cron list` แสดงงานที่ตรงกันทั้งหมดโดยค่าเริ่มต้น ส่ง `--agent <id>` เพื่อแสดงเฉพาะงานที่รหัสเอเจนต์ที่ปรับเป็นมาตรฐานและมีผลตรงกัน งานที่ไม่มีรหัสเอเจนต์ที่จัดเก็บไว้จะนับเป็นเอเจนต์เริ่มต้นที่กำหนดค่าไว้

`openclaw cron get <job-id>` ส่งคืน JSON งานที่จัดเก็บไว้โดยตรง ใช้ `cron show <job-id>` เมื่อคุณต้องการมุมมองที่มนุษย์อ่านได้พร้อมตัวอย่างเส้นทางการส่งมอบ

`cron list --json` และ `cron show <job-id> --json` รวมฟิลด์ `status` ระดับบนในแต่ละงาน ซึ่งคำนวณจาก `enabled`, `state.runningAtMs` และ `state.lastRunStatus` ค่า: `disabled`, `running`, `ok`, `error`, `skipped` หรือ `idle` สิ่งนี้สะท้อนคอลัมน์สถานะที่มนุษย์อ่านได้ เพื่อให้เครื่องมือภายนอกอ่านสถานะงานได้โดยไม่ต้องคำนวณใหม่

รายการ `cron runs` รวมการวินิจฉัยการส่งมอบพร้อมเป้าหมาย Cron ที่ตั้งใจไว้ เป้าหมายที่แก้ค่าแล้ว การส่งด้วยเครื่องมือ message การใช้การสำรอง และสถานะการส่งมอบ

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

```bash
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` ถูกละไว้ในงานเทิร์นเอเจนต์และถอยกลับไปใช้เอเจนต์เริ่มต้น (`main`) ส่ง `--agent <id>` ตอนสร้างเพื่อตรึงเอเจนต์เฉพาะ

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

```bash
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
```

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

- [ข้อมูลอ้างอิง CLI](/th/cli)
- [งานตามกำหนดเวลา](/th/automation/cron-jobs)
