---
read_when:
    - คุณต้องการงานตามกำหนดเวลาและการปลุกระบบ
    - คุณกำลังแก้ไขข้อบกพร่องของการดำเนินงาน Cron และบันทึกเหตุการณ์
summary: เอกสารอ้างอิง CLI สำหรับ `openclaw cron` (กำหนดเวลาและเรียกใช้งานเบื้องหลัง)
title: Cron
x-i18n:
    generated_at: "2026-07-12T15:52:58Z"
    model: gpt-5.6
    postprocess_version: locale-links-v1
    provider: openai
    source_hash: 9e16335b13f92229df0ba49c320e2714e39ab3e503e8e72f376ec2c5b0803cf7
    source_path: cli/cron.md
    workflow: 16
---

# `openclaw cron`

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

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

<Note>
การเปลี่ยนแปลงงาน Cron ทั้งหมด (`add`/`create`, `update`/`edit`, `remove`, `run`) ต้องใช้ `operator.admin` การเรียกใช้เพย์โหลดคำสั่งจะดำเนินการโดยตรงในกระบวนการ Gateway ไม่ใช่ในฐานะการเรียกเครื่องมือ `tools.exec` ของเอเจนต์ ทั้งนี้ `tools.exec.*` และการอนุมัติการดำเนินการยังคงควบคุมเครื่องมือดำเนินการที่โมเดลมองเห็น
</Note>

## สร้างงานอย่างรวดเร็ว

`openclaw cron create` เป็นนามแฝงของ `openclaw cron add` สำหรับงานใหม่ ให้ระบุกำหนดเวลาก่อนและพรอมต์เป็นลำดับถัดไป:

```bash
openclaw cron create "0 7 * * *" \
  "Summarize overnight updates." \
  --name "Morning brief" \
  --agent ops
```

ใช้ `--webhook <url>` เมื่องานควรส่งเพย์โหลดที่เสร็จสมบูรณ์ด้วย POST แทนการส่งไปยังเป้าหมายแชต:

```bash
openclaw cron create "0 18 * * 1-5" \
  "Summarize today's deploys as JSON." \
  --name "Deploy digest" \
  --webhook "https://example.invalid/openclaw/cron"
```

ใช้ `--command` สำหรับงานแบบเชลล์ที่ให้ผลลัพธ์แน่นอน ซึ่งทำงานภายใน Cron ของ OpenClaw โดยไม่เริ่มการเรียกใช้เอเจนต์/โมเดลแบบแยก:

```bash
openclaw cron create "*/15 * * * *" \
  --name "Queue depth probe" \
  --command "scripts/check-queue.sh" \
  --command-cwd "/srv/app" \
  --announce \
  --channel telegram \
  --to "-1001234567890"
```

`--command <shell>` จัดเก็บ `argv: ["sh", "-lc", <shell>]` ใช้ `--command-argv '["node","scripts/report.mjs"]'` เพื่อดำเนินการด้วย argv ที่ระบุอย่างแม่นยำ งานคำสั่งจะเก็บ stdout/stderr บันทึกประวัติ Cron ตามปกติ และส่งต่อเอาต์พุตผ่านโหมดการส่ง `announce`, `webhook` หรือ `none` แบบเดียวกับงานแบบแยก คำสั่งที่พิมพ์เพียง `NO_REPLY` จะถูกระงับ

## เซสชัน

`--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` ปิดใช้งานการส่งสำรองของตัวเรียกใช้

ใช้ `cron add|create --webhook <url>` หรือ `cron edit <job-id> --webhook <url>` เพื่อตั้งค่าการส่ง Webhook อย่าใช้ `--webhook` ร่วมกับแฟล็กการส่งแชต เช่น `--announce`, `--no-deliver`, `--channel`, `--to`, `--thread-id` หรือ `--account`

`cron edit <job-id>` สามารถยกเลิกการตั้งค่าฟิลด์การกำหนดเส้นทางการส่งแต่ละรายการด้วย `--clear-channel`, `--clear-to`, `--clear-thread-id` และ `--clear-account` (แต่ละรายการจะถูกปฏิเสธเมื่อใช้ร่วมกับแฟล็กตั้งค่าที่ตรงกัน) ซึ่งต่างจาก `--no-deliver` ที่ปิดใช้งานเฉพาะการส่งสำรองของตัวเรียกใช้ ตัวเลือกเหล่านี้จะลบฟิลด์ที่จัดเก็บไว้เพื่อให้งานกลับไปแก้ไขส่วนนั้นของเส้นทางจากค่าเริ่มต้นอีกครั้ง

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

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

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

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

1. `delivery.failureDestination` ของงาน
2. `cron.failureDestination` ส่วนกลาง
3. เป้าหมายประกาศหลักของงาน (เมื่อทั้งสองรายการข้างต้นไม่สามารถแก้ไขเป็นปลายทางที่เจาะจงได้)

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

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

งาน Cron แบบคำสั่งจะไม่เริ่มรอบการทำงานของเอเจนต์แบบแยก รหัสออกเป็นศูนย์จะบันทึกเป็น `ok` ส่วนรหัสออกที่ไม่เป็นศูนย์ สัญญาณ การหมดเวลา หรือการหมดเวลาเนื่องจากไม่มีเอาต์พุตจะบันทึกเป็น `error` และสามารถทริกเกอร์เส้นทางการแจ้งเตือนความล้มเหลวเดียวกันได้

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

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

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

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

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

### งานที่ทำซ้ำ

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

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

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

งาน Cron สถานะรันไทม์ที่รอดำเนินการ และประวัติการเรียกใช้จะอยู่ในฐานข้อมูลสถานะ SQLite ที่ใช้ร่วมกัน ไฟล์ดั้งเดิม `jobs.json`, `<name>-state.json` และ `runs/*.jsonl` จะถูกนำเข้าหนึ่งครั้งและเปลี่ยนชื่อโดยเติมส่วนต่อท้าย `.migrated` หลังจากนำเข้าแล้ว ให้แก้ไขกำหนดเวลาด้วย `openclaw cron add|edit|remove` แทนการแก้ไขไฟล์ JSON

### การเรียกใช้ด้วยตนเอง

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

```bash
openclaw cron run <job-id>
openclaw cron runs --id <job-id> --run-id <run-id>
```

เพิ่ม `--wait` เมื่อสคริปต์ควรรอจนกว่าการเรียกใช้ในคิวนั้นโดยเฉพาะจะบันทึกสถานะสิ้นสุด:

```bash
openclaw cron run <job-id> --wait --wait-timeout 10m --poll-interval 2s
```

เมื่อใช้ `--wait` CLI จะยังคงเรียก `cron.run` ก่อน จากนั้นจึงตรวจสอบ `cron.runs` เป็นระยะสำหรับ `runId` ที่ส่งคืน คำสั่งจะออกด้วยรหัส `0` เฉพาะเมื่อการเรียกใช้เสร็จสิ้นด้วยสถานะ `ok` และจะออกด้วยรหัสที่ไม่เป็นศูนย์เมื่อการเรียกใช้เสร็จสิ้นด้วย `error` หรือ `skipped` เมื่อการตอบกลับของ Gateway ไม่มี `runId` หรือเมื่อ `--wait-timeout` หมดเวลา (ค่าเริ่มต้น `10m` และตรวจสอบทุก `2s` โดยค่าเริ่มต้น) `--poll-interval` ต้องมากกว่าศูนย์

<Note>
ใช้ `--due` เมื่อต้องการให้คำสั่งแบบใช้ด้วยตนเองทำงานเฉพาะเมื่องานครบกำหนดในขณะนั้น หาก `--due --wait` ไม่ได้เพิ่มการเรียกใช้ลงในคิว คำสั่งจะส่งคืนการตอบกลับปกติสำหรับกรณีไม่เรียกใช้แทนการตรวจสอบเป็นระยะ
</Note>

## โมเดล

`cron add|edit --model <ref>` เลือกโมเดลที่อนุญาตสำหรับงาน `cron add|edit --fallbacks <list>` ตั้งค่าโมเดลสำรองรายงาน เช่น `--fallbacks openrouter/gpt-4.1-mini,openai/gpt-5` ส่ง `--fallbacks ""` สำหรับการเรียกใช้แบบเคร่งครัดโดยไม่มีโมเดลสำรอง `cron edit <job-id> --clear-fallbacks` ลบการแทนที่โมเดลสำรองรายงาน `cron edit <job-id> --clear-model` ลบการแทนที่โมเดลรายงาน เพื่อให้งานใช้ลำดับความสำคัญในการเลือกโมเดล Cron ตามปกติ (ใช้การแทนที่จากเซสชัน Cron ที่จัดเก็บไว้หากมี มิฉะนั้นใช้โมเดลของเอเจนต์/ค่าเริ่มต้น) และไม่สามารถใช้ร่วมกับ `--model` ได้ `cron add|edit --thinking <level>` ตั้งค่าการแทนที่ระดับการคิดรายงาน ส่วน `cron edit <job-id> --clear-thinking` จะลบค่านั้นเพื่อให้งานใช้ลำดับความสำคัญของระดับการคิด Cron ตามปกติ และไม่สามารถใช้ร่วมกับ `--thinking` ได้

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

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

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

`openclaw doctor` รายงานงานที่มีการตั้งค่า `payload.model` อยู่แล้ว รวมถึงจำนวนตามเนมสเปซผู้ให้บริการและรายการที่ไม่ตรงกับ `agents.defaults.model` ใช้การตรวจสอบนี้เมื่อการทำงานของการยืนยันตัวตน ผู้ให้บริการ หรือการเรียกเก็บเงินแตกต่างกันระหว่างแชตสดและงานตามกำหนดเวลา

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

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

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

### โหมดเร็ว

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

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

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

## เอาต์พุตการเรียกใช้และการปฏิเสธ

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

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

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

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

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

การรัน Cron แบบแยกเดี่ยวใช้ข้อมูลเมตาการปฏิเสธการดำเนินการแบบมีโครงสร้างจากการรันที่ฝังอยู่ (ข้อผิดพลาดร้ายแรงของเครื่องมือดำเนินการซึ่งมีรหัส `SYSTEM_RUN_DENIED` หรือ `INVALID_REQUEST`) เป็นสัญญาณการปฏิเสธที่เชื่อถือได้ นอกจากนี้ยังรองรับตัวหุ้ม `UNAVAILABLE` จากโฮสต์ Node ที่ครอบข้อผิดพลาดแบบมีโครงสร้างซ้อนอยู่ซึ่งมีรหัสใดรหัสหนึ่งดังกล่าว

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

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

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

การเก็บรักษาและการตัดทอนควบคุมผ่านการกำหนดค่า:

- `cron.sessionRetention` (ค่าเริ่มต้น `24h` หรือ `false` เพื่อปิดใช้งาน) จะตัดทอนเซสชันการรันแบบแยกเดี่ยวที่เสร็จสมบูรณ์แล้ว
- `cron.runLog.keepLines` (ค่าเริ่มต้น `2000`) จะตัดทอนแถวประวัติการรันใน SQLite ที่เก็บไว้สำหรับแต่ละงาน `cron.runLog.maxBytes` (ค่าเริ่มต้น `2000000`) ยังคงรองรับเพื่อความเข้ากันได้กับบันทึกการรันแบบไฟล์รุ่นเก่า โดยการตัดทอนใน SQLite จะอิงตามจำนวนแถว

## การย้ายข้อมูลงานรุ่นเก่า

<Note>
หากคุณมีงาน Cron จากก่อนรูปแบบการส่งและการจัดเก็บปัจจุบัน ให้รัน `openclaw doctor --fix` Doctor จะปรับฟิลด์ Cron แบบเดิมให้เป็นมาตรฐาน (`jobId`, `schedule.cron`, ฟิลด์การส่งระดับบนสุดรวมถึง `threadId` แบบเดิม และนามแฝงการส่ง `provider` ในเพย์โหลด) และย้ายงาน Webhook สำรองที่มี `notify: true` จาก `cron.webhook` ไปเป็นการส่งผ่าน Webhook ที่ระบุอย่างชัดเจน งานที่ประกาศไปยังแชตอยู่แล้วจะคงการส่งนั้นไว้และได้รับปลายทาง Webhook สำหรับการเสร็จสิ้น เมื่อไม่ได้ตั้งค่า `cron.webhook` เครื่องหมาย `notify` ระดับบนสุดที่ไม่มีผลจะถูกลบออกจากงานที่ไม่มีเป้าหมายให้ย้าย (โดยคงการส่งเดิมไว้โดยไม่เปลี่ยนแปลง) เพื่อไม่ให้ `doctor --fix` เตือนซ้ำเกี่ยวกับงานเหล่านั้นอีก
</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 create "0 7 * * *" \
  "Summarize overnight updates." \
  --name "Lightweight morning brief" \
  --session isolated \
  --light-context \
  --no-deliver
```

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

สร้างงานคำสั่งโดยระบุ argv, cwd, env, stdin และขีดจำกัดผลลัพธ์อย่างแน่นอน:

```bash
openclaw cron create "*/30 * * * *" \
  --name "Position export" \
  --command-argv '["node","scripts/export-position.mjs"]' \
  --command-cwd "/srv/app" \
  --command-env "NODE_ENV=production" \
  --command-input '{"mode":"summary"}' \
  --timeout-seconds 120 \
  --no-output-timeout-seconds 30 \
  --output-max-bytes 65536 \
  --webhook "https://example.invalid/openclaw/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 run <job-id> --wait --wait-timeout 10m
openclaw cron run <job-id> --wait --wait-timeout 10m --poll-interval 2s
openclaw cron runs --id <job-id> --limit 50
openclaw cron runs --id <job-id> --run-id <run-id>
```

โดยค่าเริ่มต้น `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` สถานะ JSON จะคงรูปแบบมาตรฐานและไม่มีการตกแต่ง เพื่อให้เครื่องมือภายนอกอ่านสถานะงานได้โดยไม่ต้องคำนวณใหม่ ส่วนผลลัพธ์สำหรับมนุษย์อาจตกแต่งสถานะ `error` ที่เกิดซ้ำด้วยจำนวนครั้งที่ล้มเหลว

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

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

```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> --webhook "https://example.invalid/openclaw/cron"
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)
