Cron adalah penjadwal bawaan Gateway. Cron mempertahankan job, membangunkan agent pada waktu yang tepat, dan dapat mengirimkan output kembali ke channel chat atau endpoint Webhook.Documentation Index
Fetch the complete documentation index at: https://docs.openclaw.ai/llms.txt
Use this file to discover all available pages before exploring further.
Mulai cepat
Cara kerja cron
- Cron berjalan di dalam proses Gateway (bukan di dalam model).
- Definisi job dipertahankan di
~/.openclaw/cron/jobs.jsonsehingga jadwal tidak hilang saat restart. - Status eksekusi runtime dipertahankan di sebelahnya dalam
~/.openclaw/cron/jobs-state.json. Jika Anda melacak definisi cron di git, lacakjobs.jsondan masukkanjobs-state.jsonke gitignore. - Setelah pemisahan, versi OpenClaw lama dapat membaca
jobs.jsontetapi mungkin memperlakukan job sebagai baru karena field runtime kini berada dijobs-state.json. - Saat
jobs.jsondiedit ketika Gateway sedang berjalan atau berhenti, OpenClaw membandingkan field jadwal yang berubah dengan metadata slot runtime tertunda dan menghapus nilainextRunAtMsyang usang. Penulisan ulang yang hanya mengubah format atau urutan key mempertahankan slot tertunda. - Semua eksekusi cron membuat catatan tugas latar belakang.
- Saat Gateway startup, job agent-turn terisolasi yang terlambat dijadwalkan ulang keluar dari jendela koneksi channel alih-alih diputar ulang seketika, sehingga startup Discord/Telegram dan setup perintah native tetap responsif setelah restart.
- Job sekali jalan (
--at) otomatis dihapus setelah berhasil secara default. - Eksekusi cron terisolasi menutup tab/proses browser terlacak secara upaya terbaik untuk sesi
cron:<jobId>miliknya saat eksekusi selesai, sehingga otomatisasi browser yang terlepas tidak meninggalkan proses yatim. - Eksekusi cron terisolasi yang menerima izin sempit pembersihan mandiri cron tetap dapat membaca status penjadwal, daftar yang difilter mandiri dari job mereka saat ini, dan riwayat eksekusi job tersebut, sehingga pemeriksaan status/heartbeat dapat memeriksa jadwalnya sendiri tanpa memperoleh akses mutasi cron yang lebih luas.
- Eksekusi cron terisolasi juga melindungi dari balasan pengakuan yang usang. Jika hasil pertama hanya pembaruan status sementara (
on it,pulling everything together, dan petunjuk serupa) dan tidak ada eksekusi subagent turunan yang masih bertanggung jawab atas jawaban akhir, OpenClaw meminta ulang sekali untuk hasil sebenarnya sebelum pengiriman. - Eksekusi cron terisolasi lebih memilih metadata penolakan eksekusi terstruktur dari eksekusi tertanam, lalu fallback ke penanda ringkasan/output akhir yang dikenal seperti
SYSTEM_RUN_DENIEDdanINVALID_REQUEST, sehingga perintah yang diblokir tidak dilaporkan sebagai eksekusi hijau. - Eksekusi cron terisolasi juga memperlakukan kegagalan agent tingkat eksekusi sebagai error job meskipun tidak ada payload balasan yang dihasilkan, sehingga kegagalan model/provider menambah penghitung error dan memicu notifikasi kegagalan alih-alih membersihkan job sebagai berhasil.
- Saat job agent-turn terisolasi mencapai
timeoutSeconds, cron membatalkan eksekusi agent yang mendasarinya dan memberinya jendela pembersihan singkat. Jika eksekusi tidak selesai mengalir, pembersihan milik Gateway menghapus paksa kepemilikan sesi eksekusi tersebut sebelum cron mencatat timeout, sehingga pekerjaan chat yang mengantre tidak tertinggal di balik sesi pemrosesan yang usang. - Jika agent-turn terisolasi macet sebelum runner dimulai atau sebelum panggilan model pertama, cron mencatat timeout spesifik fase seperti
setup timed out before runner startataustalled before first model call (last phase: context-engine). Watchdog ini mencakup provider tertanam dan provider berbasis CLI sebelum proses CLI eksternalnya benar-benar dimulai, dan dibatasi secara independen dari nilaitimeoutSecondsyang panjang sehingga kegagalan cold-start/auth/context muncul cepat alih-alih menunggu seluruh anggaran job.
Rekonsiliasi tugas untuk cron pertama-tama dimiliki runtime, lalu didukung riwayat tahan lama: tugas cron aktif tetap live selama runtime cron masih melacak job tersebut sebagai berjalan, meskipun baris sesi child lama masih ada. Setelah runtime berhenti memiliki job dan jendela tenggang 5 menit berakhir, pemeliharaan memeriksa log eksekusi yang dipertahankan dan status job untuk eksekusi
cron:<jobId>:<startedAt> yang cocok. Jika riwayat tahan lama tersebut menunjukkan hasil terminal, ledger tugas difinalisasi darinya; jika tidak, pemeliharaan milik Gateway dapat menandai tugas sebagai lost. Audit CLI offline dapat memulihkan dari riwayat tahan lama, tetapi tidak memperlakukan set active-job dalam prosesnya sendiri yang kosong sebagai bukti bahwa eksekusi cron milik Gateway sudah hilang.Jenis jadwal
| Jenis | Flag CLI | Deskripsi |
|---|---|---|
at | --at | Timestamp sekali jalan (ISO 8601 atau relatif seperti 20m) |
every | --every | Interval tetap |
cron | --cron | Ekspresi cron 5-field atau 6-field dengan --tz opsional |
--tz America/New_York untuk penjadwalan waktu dinding lokal.
Ekspresi berulang di awal jam otomatis disebar hingga 5 menit untuk mengurangi lonjakan beban. Gunakan --exact untuk memaksa waktu yang presisi atau --stagger 30s untuk jendela eksplisit.
Day-of-month dan day-of-week menggunakan logika OR
Ekspresi cron diurai oleh croner. Saat field day-of-month dan day-of-week sama-sama bukan wildcard, croner cocok ketika salah satu field cocok — bukan keduanya. Ini adalah perilaku cron Vixie standar.+ milik Croner (0 9 15 * +1) atau jadwalkan pada satu field dan lindungi field lainnya dalam prompt atau perintah job Anda.
Gaya eksekusi
| Gaya | Nilai --session | Berjalan di | Paling cocok untuk |
|---|---|---|---|
| Sesi utama | main | Giliran Heartbeat berikutnya | Pengingat, event sistem |
| Terisolasi | isolated | cron:<jobId> khusus | Laporan, pekerjaan latar belakang |
| Sesi saat ini | current | Diikat saat pembuatan | Pekerjaan berulang sadar konteks |
| Sesi kustom | session:custom-id | Sesi bernama persisten | Workflow yang membangun di atas riwayat |
Sesi utama vs terisolasi vs kustom
Sesi utama vs terisolasi vs kustom
Job sesi utama mengantrekan event sistem dan secara opsional membangunkan Heartbeat (
--wake now atau --wake next-heartbeat). Event sistem tersebut tidak memperpanjang kesegaran reset harian/idle untuk sesi target. Job terisolasi menjalankan agent turn khusus dengan sesi baru. Sesi kustom (session:xxx) mempertahankan konteks di seluruh eksekusi, memungkinkan workflow seperti standup harian yang membangun di atas ringkasan sebelumnya.Arti 'sesi baru' untuk job terisolasi
Arti 'sesi baru' untuk job terisolasi
Untuk job terisolasi, “sesi baru” berarti id transkrip/sesi baru untuk setiap eksekusi. OpenClaw dapat membawa preferensi aman seperti pengaturan thinking/fast/verbose, label, dan override model/auth yang dipilih pengguna secara eksplisit, tetapi tidak mewarisi konteks percakapan sekitar dari baris cron lama: routing channel/grup, kebijakan kirim atau antre, elevasi, origin, atau binding runtime ACP. Gunakan
current atau session:<id> saat job berulang memang harus membangun di atas konteks percakapan yang sama.Pembersihan runtime
Pembersihan runtime
Untuk job terisolasi, teardown runtime kini mencakup pembersihan browser upaya terbaik untuk sesi cron tersebut. Kegagalan pembersihan diabaikan sehingga hasil cron sebenarnya tetap menjadi penentu.Eksekusi cron terisolasi juga membuang instance runtime MCP bundel apa pun yang dibuat untuk job melalui jalur pembersihan runtime bersama. Ini sesuai dengan cara klien MCP sesi utama dan sesi kustom dibongkar, sehingga job cron terisolasi tidak membocorkan proses child stdio atau koneksi MCP berumur panjang antar eksekusi.
Pengiriman subagent dan Discord
Pengiriman subagent dan Discord
Saat eksekusi cron terisolasi mengorkestrasi subagent, pengiriman juga lebih memilih output turunan akhir daripada teks sementara parent yang usang. Jika turunan masih berjalan, OpenClaw menahan pembaruan parent parsial tersebut alih-alih mengumumkannya.Untuk target pengumuman Discord teks saja, OpenClaw mengirim teks assistant akhir kanonis sekali alih-alih memutar ulang payload teks streamed/menengah sekaligus jawaban akhir. Payload media dan Discord terstruktur tetap dikirim sebagai payload terpisah sehingga lampiran dan komponen tidak hilang.
Opsi payload untuk job terisolasi
Teks prompt (wajib untuk terisolasi).
Override model; menggunakan model yang diizinkan dan dipilih untuk job.
Override level thinking.
Lewati injeksi file bootstrap workspace.
Batasi alat yang dapat digunakan job, misalnya
--tools exec,read.--model menggunakan model yang diizinkan dan dipilih sebagai model utama job tersebut. Ini tidak sama dengan override /model sesi chat: chain fallback yang dikonfigurasi tetap berlaku saat model utama job gagal. Jika model yang diminta tidak diizinkan atau tidak dapat di-resolve, cron menggagalkan eksekusi dengan error validasi eksplisit alih-alih fallback diam-diam ke pemilihan model agent/default job.
Job cron juga dapat membawa fallbacks tingkat payload. Jika ada, daftar tersebut menggantikan chain fallback yang dikonfigurasi untuk job. Gunakan fallbacks: [] dalam payload/API job saat Anda menginginkan eksekusi cron ketat yang hanya mencoba model yang dipilih. Jika job memiliki --model tetapi tidak memiliki fallback payload maupun yang dikonfigurasi, OpenClaw meneruskan override fallback kosong eksplisit sehingga model utama agent tidak ditambahkan sebagai target percobaan ulang ekstra tersembunyi.
Prioritas pemilihan model untuk job terisolasi adalah:
- Override model hook Gmail (saat eksekusi berasal dari Gmail dan override tersebut diizinkan)
modelpayload per job- Override model sesi cron tersimpan yang dipilih pengguna
- Pemilihan model agent/default
params.fastMode, cron terisolasi menggunakannya secara default. Override fastMode sesi tersimpan tetap menang atas konfigurasi di kedua arah.
Jika eksekusi terisolasi terkena handoff pengalihan model live, cron mencoba ulang dengan provider/model yang dialihkan dan mempertahankan pemilihan live tersebut untuk eksekusi aktif sebelum mencoba ulang. Saat pengalihan juga membawa profil auth baru, cron juga mempertahankan override profil auth tersebut untuk eksekusi aktif. Percobaan ulang dibatasi: setelah upaya awal plus 2 percobaan ulang pengalihan, cron membatalkan alih-alih berulang selamanya.
Sebelum eksekusi cron terisolasi memasuki runner agen, OpenClaw memeriksa endpoint penyedia lokal yang dapat dijangkau untuk penyedia api: "ollama" dan api: "openai-completions" yang dikonfigurasi dengan baseUrl berupa loopback, jaringan privat, atau .local. Jika endpoint tersebut mati, eksekusi dicatat sebagai skipped dengan error penyedia/model yang jelas, bukan memulai panggilan model. Hasil endpoint di-cache selama 5 menit, sehingga banyak job jatuh tempo yang menggunakan server lokal Ollama, vLLM, SGLang, atau LM Studio yang sama-sama mati berbagi satu probe kecil alih-alih membuat badai permintaan. Eksekusi preflight penyedia yang dilewati tidak menambah backoff error eksekusi; aktifkan failureAlert.includeSkipped saat Anda menginginkan notifikasi skip berulang.
Pengiriman dan keluaran
| Mode | Yang terjadi |
|---|---|
announce | Mengirim teks akhir secara fallback ke target jika agen tidak mengirim |
webhook | POST payload peristiwa selesai ke sebuah URL |
none | Tidak ada pengiriman fallback runner |
--announce --channel telegram --to "-1001234567890" untuk pengiriman channel. Untuk topik forum Telegram, gunakan -1001234567890:topic:123; pemanggil RPC/konfigurasi langsung juga dapat meneruskan delivery.threadId sebagai string atau angka. Target Slack/Discord/Mattermost sebaiknya menggunakan prefiks eksplisit (channel:<id>, user:<id>). ID ruang Matrix peka huruf besar-kecil; gunakan ID ruang persisnya atau bentuk room:!room:server dari Matrix.
Saat pengiriman announce menggunakan channel: "last" atau menghilangkan channel, target berprefiks penyedia seperti telegram:123 dapat memilih channel sebelum cron kembali ke riwayat sesi atau satu channel terkonfigurasi. Hanya prefiks yang diiklankan oleh Plugin yang dimuat yang menjadi pemilih penyedia. Jika delivery.channel eksplisit, prefiks target harus menyebut penyedia yang sama; misalnya, channel: "whatsapp" dengan to: "telegram:123" ditolak alih-alih membiarkan WhatsApp menafsirkan ID Telegram sebagai nomor telepon. Prefiks jenis target dan layanan seperti channel:<id>, user:<id>, imessage:<handle>, dan sms:<number> tetap menjadi sintaks target yang dimiliki channel, bukan pemilih penyedia.
Untuk job terisolasi, pengiriman chat dibagikan. Jika rute chat tersedia, agen dapat menggunakan tool message bahkan saat job menggunakan --no-deliver. Jika agen mengirim ke target yang dikonfigurasi/saat ini, OpenClaw melewati announce fallback. Jika tidak, announce, webhook, dan none hanya mengontrol apa yang dilakukan runner dengan balasan akhir setelah giliran agen.
Saat agen membuat pengingat terisolasi dari chat aktif, OpenClaw menyimpan target pengiriman live yang dipertahankan untuk rute announce fallback. Kunci sesi internal dapat berupa huruf kecil; target pengiriman penyedia tidak direkonstruksi dari kunci tersebut saat konteks chat saat ini tersedia.
Pengiriman announce implisit menggunakan allowlist channel yang dikonfigurasi untuk memvalidasi dan mengalihkan target basi. Persetujuan pairing-store DM bukan penerima otomatisasi fallback; tetapkan delivery.to atau konfigurasikan entri channel allowFrom saat job terjadwal harus mengirim secara proaktif ke DM.
Notifikasi kegagalan mengikuti jalur tujuan terpisah:
cron.failureDestinationmenetapkan default global untuk notifikasi kegagalan.job.delivery.failureDestinationmenimpanya per job.- Jika keduanya tidak ditetapkan dan job sudah mengirim melalui
announce, notifikasi kegagalan sekarang kembali ke target announce utama tersebut. delivery.failureDestinationhanya didukung pada jobsessionTarget="isolated"kecuali mode pengiriman utama adalahwebhook.failureAlert.includeSkipped: truememasukkan job atau kebijakan peringatan cron global ke dalam peringatan eksekusi yang dilewati secara berulang. Eksekusi yang dilewati mempertahankan penghitung skip berurutan terpisah, sehingga tidak memengaruhi backoff error eksekusi.
Contoh CLI
- Pengingat sekali jalan
- Job terisolasi berulang
- Override model dan pemikiran
Webhook
Gateway dapat mengekspos endpoint Webhook HTTP untuk pemicu eksternal. Aktifkan di konfigurasi:Autentikasi
Setiap permintaan harus menyertakan token hook melalui header:Authorization: Bearer <token>(direkomendasikan)x-openclaw-token: <token>
POST /hooks/wake
POST /hooks/wake
POST /hooks/agent
POST /hooks/agent
Jalankan giliran agen terisolasi:Field:
message (wajib), name, agentId, wakeMode, deliver, channel, to, model, fallbacks, thinking, timeoutSeconds.Hook yang dipetakan (POST /hooks/<name>)
Hook yang dipetakan (POST /hooks/<name>)
Nama hook kustom diselesaikan melalui
hooks.mappings di konfigurasi. Pemetaan dapat mengubah payload arbitrer menjadi tindakan wake atau agent dengan templat atau transformasi kode.Integrasi Gmail PubSub
Hubungkan pemicu inbox Gmail ke OpenClaw melalui Google PubSub.Prasyarat: CLI
gcloud, gog (gogcli), hook OpenClaw diaktifkan, Tailscale untuk endpoint HTTPS publik.Penyiapan wizard (direkomendasikan)
hooks.gmail, mengaktifkan preset Gmail, dan menggunakan Tailscale Funnel untuk endpoint push.
Auto-start Gateway
Saathooks.enabled=true dan hooks.gmail.account ditetapkan, Gateway memulai gog gmail watch serve saat boot dan memperbarui watch secara otomatis. Tetapkan OPENCLAW_SKIP_GMAIL_WATCHER=1 untuk tidak ikut.
Penyiapan manual sekali jalan
Override model Gmail
Mengelola job
Catatan override model:
openclaw cron add|edit --model ...mengubah model yang dipilih job.- Jika model diizinkan, penyedia/model persis itu mencapai eksekusi agen terisolasi.
- Jika tidak diizinkan atau tidak dapat diselesaikan, cron menggagalkan eksekusi dengan error validasi eksplisit.
- Rantai fallback yang dikonfigurasi tetap berlaku karena cron
--modeladalah primer job, bukan override/modelsesi. - Payload
fallbacksmenggantikan fallback yang dikonfigurasi untuk job tersebut;fallbacks: []menonaktifkan fallback dan membuat eksekusi ketat. --modelbiasa tanpa daftar fallback eksplisit atau terkonfigurasi tidak jatuh ke primer agen sebagai target retry ekstra diam-diam.
Konfigurasi
maxConcurrentRuns membatasi dispatch cron terjadwal sekaligus eksekusi giliran agen terisolasi. Giliran agen cron terisolasi menggunakan lane eksekusi khusus antrean cron-nested secara internal, sehingga menaikkan nilai ini memungkinkan eksekusi LLM cron independen berjalan paralel alih-alih hanya memulai wrapper cron luarnya. Lane nested non-cron bersama tidak diperlebar oleh pengaturan ini.
Sidecar status runtime diturunkan dari cron.store: store .json seperti ~/clawd/cron/jobs.json menggunakan ~/clawd/cron/jobs-state.json, sedangkan path store tanpa sufiks .json menambahkan -state.json.
Jika Anda mengedit jobs.json secara manual, jangan masukkan jobs-state.json ke kontrol sumber. OpenClaw menggunakan sidecar tersebut untuk slot tertunda, penanda aktif, metadata eksekusi terakhir, dan identitas jadwal yang memberi tahu scheduler kapan job yang diedit secara eksternal memerlukan nextRunAtMs baru.
Nonaktifkan cron: cron.enabled: false atau OPENCLAW_SKIP_CRON=1.
Perilaku retry
Perilaku retry
Retry sekali jalan: error sementara (batas laju, overload, jaringan, error server) mencoba ulang hingga 3 kali dengan backoff eksponensial. Error permanen langsung menonaktifkan.Retry berulang: backoff eksponensial (30 dtk hingga 60 mnt) di antara retry. Backoff direset setelah eksekusi berhasil berikutnya.
Pemeliharaan
Pemeliharaan
cron.sessionRetention (default 24h) memangkas entri run-session terisolasi. cron.runLog.maxBytes / cron.runLog.keepLines memangkas otomatis file run-log.Pemecahan masalah
Tangga perintah
Cron tidak berjalan
Cron tidak berjalan
- Periksa
cron.enableddan env varOPENCLAW_SKIP_CRON. - Pastikan Gateway berjalan terus-menerus.
- Untuk jadwal
cron, verifikasi zona waktu (--tz) dibandingkan zona waktu host. reason: not-duedalam output run berarti run manual diperiksa denganopenclaw cron run <jobId> --duedan job belum jatuh tempo.
Cron berjalan tetapi tidak ada pengiriman
Cron berjalan tetapi tidak ada pengiriman
- Mode pengiriman
noneberarti tidak ada pengiriman fallback runner yang diharapkan. Agent tetap dapat mengirim langsung dengan toolmessageketika rute chat tersedia. - Target pengiriman tidak ada/tidak valid (
channel/to) berarti outbound dilewati. - Untuk Matrix, job yang disalin atau legacy dengan ID room
delivery.toberhuruf kecil dapat gagal karena ID room Matrix peka huruf besar-kecil. Edit job ke nilai!room:serveratauroom:!room:serveryang persis dari Matrix. - Error auth channel (
unauthorized,Forbidden) berarti pengiriman diblokir oleh kredensial. - Jika run terisolasi hanya mengembalikan token senyap (
NO_REPLY/no_reply), OpenClaw menekan pengiriman outbound langsung dan juga menekan jalur ringkasan antrean fallback, sehingga tidak ada yang diposting kembali ke chat. - Jika agent seharusnya mengirim pesan ke pengguna sendiri, periksa bahwa job memiliki rute yang dapat digunakan (
channel: "last"dengan chat sebelumnya, atau channel/target eksplisit).
Cron atau heartbeat tampaknya mencegah rollover /new-style
Cron atau heartbeat tampaknya mencegah rollover /new-style
- Kesegaran reset harian dan idle tidak didasarkan pada
updatedAt; lihat Manajemen sesi. - Wakeup Cron, run heartbeat, notifikasi exec, dan pembukuan gateway dapat memperbarui baris sesi untuk routing/status, tetapi tidak memperpanjang
sessionStartedAtataulastInteractionAt. - Untuk baris legacy yang dibuat sebelum field tersebut ada, OpenClaw dapat memulihkan
sessionStartedAtdari header sesi transcript JSONL ketika file masih tersedia. Baris idle legacy tanpalastInteractionAtmenggunakan waktu mulai yang dipulihkan itu sebagai baseline idle-nya.
Hal-hal penting tentang zona waktu
Hal-hal penting tentang zona waktu
- Cron tanpa
--tzmenggunakan zona waktu host gateway. - Jadwal
attanpa zona waktu diperlakukan sebagai UTC. - Heartbeat
activeHoursmenggunakan resolusi zona waktu yang dikonfigurasi.
Terkait
- Automasi — semua mekanisme automasi sekilas
- Tugas Latar Belakang — ledger tugas untuk eksekusi cron
- Heartbeat — giliran sesi utama berkala
- Zona Waktu — konfigurasi zona waktu