Tugas Terjadwal (Cron)
Cron adalah scheduler bawaan Gateway. Ini menyimpan pekerjaan, membangunkan agen pada waktu yang tepat, dan dapat mengirimkan output kembali ke channel chat atau endpoint webhook.Mulai cepat
Cara kerja cron
- Cron berjalan di dalam proses Gateway (bukan di dalam model).
- Pekerjaan disimpan di
~/.openclaw/cron/jobs.jsonsehingga restart tidak menghilangkan jadwal. - Semua eksekusi cron membuat catatan tugas latar belakang.
- Pekerjaan sekali jalan (
--at) otomatis dihapus setelah berhasil secara default. - Eksekusi cron terisolasi akan menutup tab/proses browser yang terlacak untuk sesi
cron:<jobId>mereka secara best-effort saat eksekusi selesai, sehingga otomasi browser yang terlepas tidak meninggalkan proses yatim. - Eksekusi cron terisolasi juga melindungi dari balasan pengakuan yang kedaluwarsa. Jika
hasil pertama hanya berupa pembaruan status sementara (
on it,pulling everything together, dan petunjuk serupa) dan tidak ada eksekusi subagen turunan yang masih bertanggung jawab atas jawaban akhir, OpenClaw akan meminta ulang sekali untuk hasil yang sebenarnya sebelum pengiriman.
lost.
Jenis jadwal
| Jenis | Flag CLI | Deskripsi |
|---|---|---|
at | --at | Stempel waktu 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 lokal.
Ekspresi rekuren tepat di awal jam otomatis di-stagger hingga 5 menit untuk mengurangi lonjakan beban. Gunakan --exact untuk memaksa waktu yang presisi atau --stagger 30s untuk jendela eksplisit.
Gaya eksekusi
| Gaya | Nilai --session | Berjalan di | Paling cocok untuk |
|---|---|---|---|
| Sesi utama | main | Giliran heartbeat berikutnya | Pengingat, peristiwa sistem |
| Terisolasi | isolated | cron:<jobId> khusus | Laporan, pekerjaan latar belakang |
| Sesi saat ini | current | Terikat saat pembuatan | Pekerjaan rekuren yang sadar konteks |
| Sesi kustom | session:custom-id | Sesi bernama persisten | Workflow yang dibangun di atas riwayat |
--wake now atau --wake next-heartbeat). Pekerjaan terisolasi menjalankan giliran agen khusus dengan sesi baru. Sesi kustom (session:xxx) mempertahankan konteks antar eksekusi, memungkinkan workflow seperti standup harian yang dibangun dari ringkasan sebelumnya.
Untuk pekerjaan terisolasi, teardown runtime sekarang mencakup pembersihan browser secara best-effort untuk sesi cron tersebut. Kegagalan pembersihan diabaikan sehingga hasil cron yang sebenarnya tetap menjadi prioritas.
Saat eksekusi cron terisolasi mengorkestrasi subagen, pengiriman juga lebih mengutamakan
output turunan akhir daripada teks sementara induk yang sudah kedaluwarsa. Jika turunan masih
berjalan, OpenClaw menekan pembaruan induk parsial tersebut alih-alih mengumumkannya.
Opsi payload untuk pekerjaan terisolasi
--message: teks prompt (wajib untuk terisolasi)--model/--thinking: override model dan tingkat pemikiran--light-context: lewati injeksi file bootstrap workspace--tools exec,read: batasi alat mana yang dapat digunakan pekerjaan
--model menggunakan model yang dipilih dan diizinkan untuk pekerjaan tersebut. Jika model yang diminta
tidak diizinkan, cron mencatat peringatan dan kembali ke pemilihan model agen/default
untuk pekerjaan itu. Rantai fallback yang dikonfigurasi tetap berlaku, tetapi override model biasa
tanpa daftar fallback per pekerjaan yang eksplisit tidak lagi menambahkan model utama agen sebagai target retry tambahan yang tersembunyi.
Urutan prioritas pemilihan model untuk pekerjaan terisolasi adalah:
- Override model hook Gmail (saat eksekusi berasal dari Gmail dan override itu diizinkan)
modelpayload per pekerjaan- Override model sesi cron yang tersimpan
- Pemilihan model agen/default
params.fastMode, cron terisolasi akan menggunakannya secara default. Override fastMode
sesi yang tersimpan tetap lebih diutamakan daripada config dalam kedua arah.
Jika eksekusi terisolasi mencapai handoff perpindahan model live, cron akan mencoba ulang dengan
penyedia/model yang telah dialihkan dan menyimpan pemilihan live tersebut sebelum mencoba ulang. Saat
perpindahan itu juga membawa profil auth baru, cron juga menyimpan override profil auth
tersebut. Retry dibatasi: setelah percobaan awal ditambah 2 retry perpindahan
, cron akan membatalkan alih-alih berulang tanpa akhir.
Pengiriman dan output
| Mode | Yang terjadi |
|---|---|
announce | Kirim ringkasan ke channel target (default untuk terisolasi) |
webhook | POST payload peristiwa selesai ke URL |
none | Internal saja, tanpa pengiriman |
--announce --channel telegram --to "-1001234567890" untuk pengiriman ke channel. Untuk topik forum Telegram, gunakan -1001234567890:topic:123. Target Slack/Discord/Mattermost harus menggunakan prefiks eksplisit (channel:<id>, user:<id>).
Untuk pekerjaan terisolasi yang dimiliki cron, runner memiliki jalur pengiriman akhir. Agen
diprompt untuk mengembalikan ringkasan teks biasa, lalu ringkasan itu dikirim
melalui announce, webhook, atau tetap internal untuk none. --no-deliver
tidak mengembalikan pengiriman ke agen; ini membuat eksekusi tetap internal.
Jika tugas asli secara eksplisit mengatakan untuk mengirim pesan ke penerima eksternal tertentu, agen
harus mencatat kepada siapa/ke mana pesan itu harus dikirim dalam outputnya alih-alih
mencoba mengirimkannya langsung.
Notifikasi kegagalan mengikuti jalur tujuan terpisah:
cron.failureDestinationmenetapkan default global untuk notifikasi kegagalan.job.delivery.failureDestinationmenimpa itu per pekerjaan.- Jika keduanya tidak disetel dan pekerjaan sudah mengirim melalui
announce, notifikasi kegagalan kini akan fallback ke target announce utama tersebut. delivery.failureDestinationhanya didukung pada pekerjaansessionTarget="isolated"kecuali mode pengiriman utama adalahwebhook.
Contoh CLI
Pengingat sekali jalan (sesi utama):Webhook
Gateway dapat mengekspos endpoint webhook HTTP untuk pemicu eksternal. Aktifkan di config:Autentikasi
Setiap permintaan harus menyertakan token hook melalui header:Authorization: Bearer <token>(disarankan)x-openclaw-token: <token>
POST /hooks/wake
Antrikan peristiwa sistem untuk sesi utama:text(wajib): deskripsi peristiwamode(opsional):now(default) ataunext-heartbeat
POST /hooks/agent
Jalankan giliran agen terisolasi:message (wajib), name, agentId, wakeMode, deliver, channel, to, model, thinking, timeoutSeconds.
Hook yang dipetakan (POST /hooks/<name>)
Nama hook kustom diselesaikan melaluihooks.mappings di config. Mapping dapat mentransformasi payload arbitrer menjadi aksi wake atau agent dengan template atau transformasi kode.
Keamanan
- Simpan endpoint hook di balik loopback, tailnet, atau reverse proxy tepercaya.
- Gunakan token hook khusus; jangan gunakan ulang token auth gateway.
- Simpan
hooks.pathpada subpath khusus;/ditolak. - Set
hooks.allowedAgentIdsuntuk membatasi routingagentIdeksplisit. - Biarkan
hooks.allowRequestSessionKey=falsekecuali Anda memerlukan sesi yang dipilih pemanggil. - Jika Anda mengaktifkan
hooks.allowRequestSessionKey, set jugahooks.allowedSessionKeyPrefixesuntuk membatasi bentuk session key yang diizinkan. - Payload hook dibungkus dengan batas keamanan secara default.
Integrasi Gmail PubSub
Hubungkan pemicu inbox Gmail ke OpenClaw melalui Google PubSub. Prasyarat:gcloud CLI, gog (gogcli), hook OpenClaw diaktifkan, Tailscale untuk endpoint HTTPS publik.
Setup wizard (disarankan)
hooks.gmail, mengaktifkan preset Gmail, dan menggunakan Tailscale Funnel untuk endpoint push.
Gateway auto-start
Saathooks.enabled=true dan hooks.gmail.account disetel, Gateway memulai gog gmail watch serve saat boot dan memperbarui watch secara otomatis. Set OPENCLAW_SKIP_GMAIL_WATCHER=1 untuk menonaktifkannya.
Setup manual sekali saja
- Pilih project GCP yang memiliki klien OAuth yang digunakan oleh
gog:
- Buat topic dan berikan akses push Gmail:
- Mulai watch:
Override model Gmail
Mengelola pekerjaan
openclaw cron add|edit --model ...mengubah model yang dipilih untuk pekerjaan.- Jika model diizinkan, penyedia/model yang tepat itu akan mencapai eksekusi agen terisolasi.
- Jika tidak diizinkan, cron memberi peringatan dan kembali ke pemilihan model agen/default pekerjaan tersebut.
- Rantai fallback yang dikonfigurasi tetap berlaku, tetapi override
--modelbiasa tanpa daftar fallback per pekerjaan yang eksplisit tidak lagi diteruskan ke model utama agen sebagai target retry tambahan diam-diam.
Konfigurasi
cron.enabled: false atau OPENCLAW_SKIP_CRON=1.
Retry sekali jalan: error sementara (rate limit, overload, network, server error) akan dicoba ulang hingga 3 kali dengan exponential backoff. Error permanen langsung dinonaktifkan.
Retry rekuren: exponential backoff (30 detik hingga 60 menit) di antara retry. Backoff direset setelah eksekusi berhasil berikutnya.
Maintenance: cron.sessionRetention (default 24h) memangkas entri sesi eksekusi terisolasi. cron.runLog.maxBytes / cron.runLog.keepLines memangkas file log eksekusi secara otomatis.
Pemecahan masalah
Urutan perintah
Cron tidak berjalan
- Periksa
cron.enableddan variabel envOPENCLAW_SKIP_CRON. - Pastikan Gateway berjalan terus-menerus.
- Untuk jadwal
cron, verifikasi zona waktu (--tz) dibandingkan zona waktu host. reason: not-duedi output eksekusi berarti eksekusi manual diperiksa denganopenclaw cron run <jobId> --duedan pekerjaan belum jatuh tempo.
Cron berjalan tetapi tidak ada pengiriman
- Mode pengiriman
noneberarti tidak ada pesan eksternal yang diharapkan. - Target pengiriman hilang/tidak valid (
channel/to) berarti pengiriman keluar dilewati. - Error auth channel (
unauthorized,Forbidden) berarti pengiriman diblokir oleh kredensial. - Jika eksekusi terisolasi hanya mengembalikan token senyap (
NO_REPLY/no_reply), OpenClaw menekan pengiriman keluar langsung dan juga menekan jalur fallback ringkasan antrean, sehingga tidak ada yang diposting kembali ke chat. - Untuk pekerjaan terisolasi yang dimiliki cron, jangan mengharapkan agen menggunakan message tool
sebagai fallback. Runner memiliki pengiriman akhir;
--no-delivermembuatnya tetap internal alih-alih mengizinkan pengiriman langsung.
Jebakan zona waktu
- Cron tanpa
--tzmenggunakan zona waktu host gateway. - Jadwal
attanpa zona waktu diperlakukan sebagai UTC. activeHoursheartbeat menggunakan resolusi zona waktu yang dikonfigurasi.
Terkait
- Otomasi & Tugas — semua mekanisme otomasi secara ringkas
- Tugas Latar Belakang — ledger tugas untuk eksekusi cron
- Heartbeat — giliran sesi utama periodik
- Zona Waktu — konfigurasi zona waktu