Cron işleri (Gateway zamanlayıcısı)
Cron mu Heartbeat mi? Her birinin ne zaman kullanılacağına dair rehber için Cron vs Heartbeat bölümüne bakın.Cron, Gateway’in yerleşik zamanlayıcısıdır. İşleri kalıcı olarak saklar, ajanı doğru zamanda uyandırır ve isteğe bağlı olarak çıktıyı bir sohbete iletebilir. “Bunu her sabah çalıştır” veya “ajanı 20 dakika sonra dürt” istiyorsanız, mekanizma cron’dur. Sorun giderme: /automation/troubleshooting
TL;DR
- Cron Gateway içinde çalışır (modelin içinde değil).
- Yeniden başlatmalarda programların kaybolmaması için işler
~/.openclaw/cron/altında kalıcıdır. - İki yürütme biçimi:
- Ana oturum: bir sistem olayı kuyruğa alınır, ardından bir sonraki heartbeat’te çalışır.
- İzole:
cron:<jobId>içinde adanmış bir ajan dönüşü çalıştırır; iletim (varsayılan olarak duyur veya hiçbiri).
- Uyandırmalar birinci sınıftır: bir iş “şimdi uyandır” ile “bir sonraki heartbeat” arasında seçim yapabilir.
Hızlı başlangıç (uygulanabilir)
Tek seferlik bir hatırlatıcı oluşturun, varlığını doğrulayın ve hemen çalıştırın:Araç çağrısı eşdeğerleri (Gateway cron aracı)
Kanonik JSON şekilleri ve örnekler için Araç çağrıları için JSON şeması bölümüne bakın.Cron işlerinin saklandığı yer
Cron işleri varsayılan olarak Gateway ana makinesinde~/.openclaw/cron/jobs.json konumunda saklanır.
Gateway dosyayı belleğe yükler ve değişikliklerde geri yazar; bu nedenle manuel düzenlemeler
yalnızca Gateway durdurulduğunda güvenlidir. Değişiklikler için openclaw cron add/edit veya cron
araç çağrısı API’sini tercih edin.
Yeni başlayanlar için genel bakış
Bir cron işini şöyle düşünün: ne zaman çalışacağı + ne yapacağı.-
Bir zamanlama seçin
- Tek seferlik hatırlatıcı →
schedule.kind = "at"(CLI:--at) - Yinelenen iş →
schedule.kind = "every"veyaschedule.kind = "cron" - ISO zaman damganızda saat dilimi yoksa UTC olarak değerlendirilir.
- Tek seferlik hatırlatıcı →
-
Nerede çalışacağını seçin
sessionTarget: "main"→ ana bağlamla bir sonraki heartbeat sırasında çalışır.sessionTarget: "isolated"→cron:<jobId>içinde adanmış bir ajan dönüşü çalıştırır.
-
Yükü seçin
- Ana oturum →
payload.kind = "systemEvent" - İzole oturum →
payload.kind = "agentTurn"
- Ana oturum →
schedule.kind = "at") varsayılan olarak başarıdan sonra silinir. Saklamak için
deleteAfterRun: false ayarlayın (başarıdan sonra devre dışı kalırlar).
Kavramlar
İşler
Bir cron işi aşağıdakilerle saklanan bir kayıttır:- bir zamanlama (ne zaman çalışacağı),
- bir yük (ne yapacağı),
- isteğe bağlı iletim modu (duyur veya hiçbiri).
- isteğe bağlı ajan bağlama (
agentId): işi belirli bir ajan altında çalıştırır; yoksa veya bilinmiyorsa gateway varsayılan ajana geri döner.
jobId ile tanımlanır (CLI/Gateway API’leri tarafından kullanılır).
Ajan araç çağrılarında jobId kanoniktir; uyumluluk için eski id kabul edilir.
Tek seferlik işler varsayılan olarak başarıdan sonra otomatik silinir; saklamak için deleteAfterRun: false ayarlayın.
Zamanlamalar
Cron üç zamanlama türünü destekler:at:schedule.at(ISO 8601) ile tek seferlik zaman damgası.every: sabit aralık (ms).cron: isteğe bağlı IANA saat dilimi ile 5 alanlı cron ifadesi.
croner kullanır. Saat dilimi belirtilmezse, Gateway ana makinesinin
yerel saat dilimi kullanılır.
Ana vs izole yürütme
Ana oturum işleri (sistem olayları)
Ana işler bir sistem olayını kuyruğa alır ve isteğe bağlı olarak heartbeat çalıştırıcısını uyandırır.payload.kind = "systemEvent" kullanmaları gerekir.
wakeMode: "now"(varsayılan): olay anında bir heartbeat çalıştırmasını tetikler.wakeMode: "next-heartbeat": olay bir sonraki planlı heartbeat’i bekler.
İzole işler (adanmış cron oturumları)
İzole işler,cron:<jobId> oturumunda adanmış bir ajan dönüşü çalıştırır.
Temel davranışlar:
- İzlenebilirlik için istem
[cron:<jobId> <job name>]ile öneklenir. - Her çalıştırma yeni bir oturum kimliği başlatır (önceki konuşma taşınmaz).
- Varsayılan davranış:
deliveryatlanırsa, izole işler bir özet duyurur (delivery.mode = "announce"). delivery.mode(yalnızca izole) ne olacağını seçer:announce: hedef kanala bir özet iletir ve ana oturuma kısa bir özet gönderir.none: yalnızca dahili (iletim yok, ana oturum özeti yok).
wakeMode, ana oturum özetinin ne zaman gönderileceğini kontrol eder:now: anında heartbeat.next-heartbeat: bir sonraki planlı heartbeat’i bekler.
Yük şekilleri (ne çalışır)
İki yük türü desteklenir:systemEvent: yalnızca ana oturum, heartbeat istemi üzerinden yönlendirilir.agentTurn: yalnızca izole oturum, adanmış bir ajan dönüşü çalıştırır.
agentTurn alanları:
message: gerekli metin istemi.model/thinking: isteğe bağlı geçersiz kılmalar (aşağıya bakın).timeoutSeconds: isteğe bağlı zaman aşımı geçersiz kılması.
delivery.mode:none|announce.delivery.channel:lastveya belirli bir kanal.delivery.to: kanala özgü hedef (telefon/sohbet/kanal kimliği).delivery.bestEffort: duyuru iletimi başarısız olursa işi başarısız saymaktan kaçın.
delivery.channel/delivery.to kullanın. delivery.mode = "none" olduğunda ana oturuma özet gönderilmez.
İzole işler için delivery atlanırsa, OpenClaw varsayılan olarak announce kullanır.
Duyuru iletimi akışı
delivery.mode = "announce" olduğunda, cron doğrudan çıkış kanalı bağdaştırıcıları üzerinden iletir.
Ana ajan mesajı oluşturmak veya iletmek için başlatılmaz.
Davranış ayrıntıları:
- İçerik: iletim, izole çalıştırmanın çıkış yüklerini (metin/medya) normal parçalama ve kanal biçimlendirmesiyle kullanır.
- Yalnızca heartbeat yanıtları (
HEARTBEAT_OKve gerçek içerik yoksa) iletilmez. - İzole çalıştırma, mesaj aracıyla aynı hedefe zaten mesaj gönderdiyse, yinelemeleri önlemek için iletim atlanır.
- Eksik veya geçersiz iletim hedefleri,
delivery.bestEffort = trueolmadıkça işi başarısız kılar. - Ana oturuma kısa bir özet yalnızca
delivery.mode = "announce"olduğunda gönderilir. - Ana oturum özeti
wakeMode’a uyar:nowanında heartbeat tetikler,next-heartbeatise bir sonraki planlı heartbeat’i bekler.
Model ve düşünme geçersiz kılmaları
İzole işler (agentTurn) modeli ve düşünme düzeyini geçersiz kılabilir:
model: Sağlayıcı/model dizesi (örn.anthropic/claude-sonnet-4-20250514) veya takma ad (örn.opus)thinking: Düşünme düzeyi (off,minimal,low,medium,high,xhigh; yalnızca GPT-5.2 + Codex modelleri)
model ayarlayabilirsiniz, ancak bu paylaşılan ana
oturum modelini değiştirir. Beklenmeyen bağlam kaymalarını önlemek için model geçersiz kılmalarını
yalnızca izole işler için öneririz.
Çözüm önceliği:
- İş yükü geçersiz kılması (en yüksek)
- Kancaya özgü varsayılanlar (örn.
hooks.gmail.model) - Ajan yapılandırması varsayılanı
İletim (kanal + hedef)
İzole işler, üst düzeydelivery yapılandırmasıyla çıktıyı bir kanala iletebilir:
delivery.mode:announce(bir özet iletir) veyanone.delivery.channel:whatsapp/telegram/discord/slack/mattermost(eklenti) /signal/imessage/last.delivery.to: kanala özgü alıcı hedefi.
sessionTarget: "isolated").
delivery.channel veya delivery.to atlanırsa, cron ana oturumun
“son rotasına” (ajanın en son yanıt verdiği yer) geri dönebilir.
Hedef biçimi hatırlatmaları:
- Slack/Discord/Mattermost (eklenti) hedefleri, belirsizliği önlemek için açık önekler kullanmalıdır (örn.
channel:<id>,user:<id>). - Telegram konuları
:topic:biçimini kullanmalıdır (aşağıya bakın).
Telegram iletim hedefleri (konular / forum iş parçacıkları)
Telegram,message_thread_id üzerinden forum konularını destekler. Cron iletimi için,
konu/iş parçacığını to alanına kodlayabilirsiniz:
-1001234567890(yalnızca sohbet kimliği)-1001234567890:topic:123(tercih edilen: açık konu işaretleyici)-1001234567890:123(kısa yol: sayısal sonek)
telegram:... / telegram:group:... gibi önekli hedefler de kabul edilir:
telegram:group:-1001234567890:topic:123
Araç çağrıları için JSON şeması
Gatewaycron.* araçlarını doğrudan çağırırken (ajan araç çağrıları veya RPC) bu şekilleri kullanın.
CLI bayrakları 20m gibi insan dostu süreleri kabul eder; ancak araç çağrıları
schedule.at için ISO 8601 dizesi ve schedule.everyMs için milisaniye kullanmalıdır.
cron.add parametreleri
Tek seferlik, ana oturum işi (sistem olayı):schedule.kind:at(at),every(everyMs) veyacron(expr, isteğe bağlıtz).schedule.atISO 8601 kabul eder (saat dilimi isteğe bağlı; atlanırsa UTC olarak değerlendirilir).everyMsmilisaniyedir.sessionTarget,"main"veya"isolated"olmalı vepayload.kindile eşleşmelidir.- İsteğe bağlı alanlar:
agentId,description,enabled,deleteAfterRun(atiçin varsayılan true),delivery. wakeMode, atlandığında"now"varsayılanını alır.
cron.update parametreleri
jobIdkanoniktir; uyumluluk içinidkabul edilir.- Bir ajan bağlamasını temizlemek için yama içinde
agentId: nullkullanın.
cron.run ve cron.remove parametreleri
Depolama ve geçmiş
- İş deposu:
~/.openclaw/cron/jobs.json(Gateway tarafından yönetilen JSON). - Çalıştırma geçmişi:
~/.openclaw/cron/runs/<jobId>.jsonl(JSONL, otomatik budanır). - Depo yolunu geçersiz kıl: yapılandırmada
cron.store.
Yapılandırma
cron.enabled: false(yapılandırma)OPENCLAW_SKIP_CRON=1(env)
CLI hızlı başlangıç
Tek seferlik hatırlatıcı (UTC ISO, başarıdan sonra otomatik silinir):--due kullanın):
Gateway API yüzeyi
cron.list,cron.status,cron.add,cron.update,cron.removecron.run(zorla veya zamanı geldiğinde),cron.runsBir iş olmadan anında sistem olayları içinopenclaw system eventkullanın.
Sorun giderme
“Hiçbir şey çalışmıyor”
- Cron’un etkin olduğunu kontrol edin:
cron.enabledveOPENCLAW_SKIP_CRON. - Gateway’in sürekli çalıştığını kontrol edin (cron Gateway süreci içinde çalışır).
cronzamanlamaları için: saat dilimini (--tz) ana makine saat dilimiyle karşılaştırın.
Yinelenen bir iş hatalardan sonra sürekli gecikiyor
- OpenClaw, ardışık hatalardan sonra yinelenen işler için üstel yeniden deneme gecikmesi uygular: denemeler arasında 30 sn, 1 dk, 5 dk, 15 dk, ardından 60 dk.
- Gecikme, bir sonraki başarılı çalıştırmadan sonra otomatik olarak sıfırlanır.
- Tek seferlik (
at) işler, terminal bir çalıştırmadan sonra (ok,errorveyaskipped) devre dışı kalır ve yeniden deneme yapmaz.
Telegram yanlış yere iletiyor
- Forum konuları için açık ve belirsizliği önlemek adına
-100…:topic:<id>kullanın. - Günlüklerde veya saklanan “son rota” hedeflerinde
telegram:...önekleri görürseniz bu normaldir; cron iletimi bunları kabul eder ve konu kimliklerini yine doğru şekilde ayrıştırır.