---
read_when:
    - คุณต้องการงานตามกำหนดเวลาและการปลุก
    - คุณกำลังดีบักการเรียกใช้งาน Cron และล็อก
summary: CLI reference สำหรับ `openclaw cron` (ตั้งเวลาและเรียกใช้งานพื้นหลัง)
title: Cron
x-i18n:
    generated_at: "2026-05-02T10:10:45Z"
    model: gpt-5.5
    provider: openai
    source_hash: 298ac3fc868462eb301febbc1aa5296d8087cad7fdc466870487081444c5856f
    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` สร้างทรานสคริปต์และ ID เซสชันใหม่สำหรับการรันแต่ละครั้ง
    - `current` ผูกกับเซสชันที่ใช้งานอยู่ ณ เวลาที่สร้าง
    - `session:<id>` ปักหมุดกับคีย์เซสชันถาวรที่ระบุอย่างชัดเจน

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

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

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

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

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

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

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

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

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

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

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

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

งานที่เกิดซ้ำใช้การถอยกลับแบบเอ็กซ์โพเนนเชียลหลังเกิดข้อผิดพลาดต่อเนื่อง: 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>` เพื่อติดตามผลลัพธ์สุดท้าย

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

## โมเดล

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

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

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`

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

<Note>
หากคุณมีงาน Cron จากก่อนรูปแบบการส่งและ store ปัจจุบัน ให้รัน `openclaw doctor --fix` Doctor จะปรับฟิลด์ Cron เก่าให้เป็นปกติ (`jobId`, `schedule.cron`, ฟิลด์การส่งระดับบนรวมถึง `threadId` เก่า, นามแฝงการส่ง `provider` ในเพย์โหลด) และย้ายงาน fallback 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
```

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

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

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

```bash
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 ทั้งหมด

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

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

```bash
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 และสถานะการส่งสำเร็จ

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

```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` ถูกละไว้ในงาน agent-turn และ fallback ไปยังเอเจนต์เริ่มต้น (`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)
