Zaplanowane zadania (Cron)
Cron to wbudowany harmonogram Gateway. Utrwala zadania, wybudza agenta we właściwym czasie i może dostarczać dane wyjściowe z powrotem do kanału czatu lub punktu końcowego Webhook.Szybki start
Jak działa cron
- Cron działa wewnątrz procesu Gateway (nie wewnątrz modelu).
- Definicje zadań są utrwalane w
~/.openclaw/cron/jobs.json, więc ponowne uruchomienia nie powodują utraty harmonogramów. - Stan wykonania w czasie działania jest utrwalany obok, w
~/.openclaw/cron/jobs-state.json. Jeśli śledzisz definicje cron w git, śledźjobs.json, ajobs-state.jsondodaj dogitignore. - Po rozdzieleniu starsze wersje OpenClaw mogą odczytać
jobs.json, ale mogą traktować zadania jako świeże, ponieważ pola środowiska uruchomieniowego znajdują się teraz wjobs-state.json. - Wszystkie wykonania cron tworzą rekordy zadań w tle.
- Zadania jednorazowe (
--at) domyślnie usuwają się automatycznie po powodzeniu. - Izolowane uruchomienia cron przy zakończeniu wykonują w miarę możliwości zamknięcie śledzonych kart/przeglądarek i procesów dla swojej sesji
cron:<jobId>, aby odłączona automatyzacja przeglądarki nie pozostawiała osieroconych procesów. - Izolowane uruchomienia cron chronią też przed nieaktualnymi odpowiedziami potwierdzającymi. Jeśli
pierwszy wynik to tylko tymczasowa aktualizacja stanu (
on it,pulling everything togetheri podobne wskazówki), a żadne podrzędne uruchomienie subagenta nie odpowiada już za końcową odpowiedź, OpenClaw ponawia prompt raz, aby uzyskać rzeczywisty wynik przed dostarczeniem.
lost.
Typy harmonogramów
| Rodzaj | Flaga CLI | Opis |
|---|---|---|
at | --at | Jednorazowy znacznik czasu (ISO 8601 lub względny, np. 20m) |
every | --every | Stały interwał |
cron | --cron | 5-polowe lub 6-polowe wyrażenie cron z opcjonalnym --tz |
--tz America/New_York do harmonogramowania według lokalnego czasu zegarowego.
Powtarzające się wyrażenia na pełną godzinę są automatycznie rozpraszane maksymalnie do 5 minut, aby ograniczyć skoki obciążenia. Użyj --exact, aby wymusić dokładny czas, albo --stagger 30s, aby ustawić jawne okno.
Dzień miesiąca i dzień tygodnia używają logiki OR
Wyrażenia cron są parsowane przez croner. Gdy pola dnia miesiąca i dnia tygodnia nie są symbolami wieloznacznymi, croner dopasowuje, gdy którekolwiek z pól pasuje — nie oba. To standardowe zachowanie cron Vixie.+ z Croner (0 9 15 * +1) albo zaplanuj według jednego pola i sprawdzaj drugie w prompcie lub poleceniu zadania.
Style wykonania
| Styl | Wartość --session | Uruchamia się w | Najlepsze dla |
|---|---|---|---|
| Sesja główna | main | Następny Heartbeat turn | Przypomnienia, zdarzenia systemowe |
| Izolowany | isolated | Dedykowane cron:<jobId> | Raporty, zadania w tle |
| Bieżąca sesja | current | Powiązana w czasie tworzenia | Praca cykliczna zależna od kontekstu |
| Sesja niestandardowa | session:custom-id | Trwała nazwana sesja | Przepływy pracy budowane na historii |
--wake now lub --wake next-heartbeat). Zadania izolowane uruchamiają dedykowany turn agenta ze świeżą sesją. Sesje niestandardowe (session:xxx) zachowują kontekst między uruchomieniami, umożliwiając przepływy pracy takie jak codzienne standupy, które bazują na poprzednich podsumowaniach.
Dla zadań izolowanych zamykanie środowiska uruchomieniowego obejmuje teraz także czyszczenie przeglądarki dla tej sesji cron, wykonywane w miarę możliwości. Błędy czyszczenia są ignorowane, aby faktyczny wynik cron nadal miał pierwszeństwo.
Gdy izolowane uruchomienia cron orkiestrują subagentów, dostarczanie preferuje także końcowy
wynik potomny zamiast nieaktualnego tymczasowego tekstu rodzica. Jeśli potomkowie nadal
działają, OpenClaw pomija tę częściową aktualizację rodzica zamiast ją ogłaszać.
Opcje payloadu dla zadań izolowanych
--message: tekst promptu (wymagany dla izolowanych)--model/--thinking: nadpisania modelu i poziomu myślenia--light-context: pomiń wstrzykiwanie plików bootstrap obszaru roboczego--tools exec,read: ogranicz, których narzędzi zadanie może używać
--model używa wybranego dozwolonego modelu dla tego zadania. Jeśli żądany model
nie jest dozwolony, cron zapisuje ostrzeżenie w logach i wraca do wyboru modelu
agenta/domyślnego dla zadania. Skonfigurowane łańcuchy fallback nadal mają zastosowanie,
ale zwykłe nadpisanie modelu bez jawnej listy fallback per zadanie nie dołącza już
głównego modelu agenta jako ukrytego dodatkowego celu ponowienia.
Priorytet wyboru modelu dla zadań izolowanych jest następujący:
- Nadpisanie modelu przez hook Gmaila (gdy uruchomienie pochodzi z Gmaila i to nadpisanie jest dozwolone)
modelw payloadzie zadania- Zapisane nadpisanie modelu sesji cron
- Wybór modelu agenta/domyślnego
params.fastMode, izolowany cron domyślnie używa tego ustawienia. Zapisane nadpisanie
fastMode sesji nadal ma pierwszeństwo względem konfiguracji w obu kierunkach.
Jeśli izolowane uruchomienie trafi na przekazanie live model-switch, cron ponawia próbę z
przełączonym dostawcą/modelem i utrwala ten wybór live przed ponowieniem. Gdy przełączenie
obejmuje także nowy profil autoryzacji, cron utrwala również to nadpisanie profilu autoryzacji.
Ponowienia są ograniczone: po początkowej próbie oraz 2 ponowieniach przełączenia
cron przerywa zamiast zapętlać się bez końca.
Dostarczanie i dane wyjściowe
| Tryb | Co się dzieje |
|---|---|
announce | Awaryjnie dostarcz końcowy tekst do celu, jeśli agent go nie wysłał |
webhook | Wyślij payload zdarzenia zakończenia metodą POST na URL |
none | Brak awaryjnego dostarczania przez runner |
--announce --channel telegram --to "-1001234567890" do dostarczania do kanału. Dla tematów forum Telegram użyj -1001234567890:topic:123. Cele Slack/Discord/Mattermost powinny używać jawnych prefiksów (channel:<id>, user:<id>).
Dla zadań izolowanych dostarczanie czatu jest współdzielone. Jeśli trasa czatu jest dostępna,
agent może użyć narzędzia message, nawet gdy zadanie używa --no-deliver. Jeśli
agent wyśle do skonfigurowanego/bieżącego celu, OpenClaw pomija awaryjne ogłoszenie.
W przeciwnym razie announce, webhook i none sterują tylko tym, co runner robi z
końcową odpowiedzią po turnie agenta.
Powiadomienia o niepowodzeniu podążają osobną ścieżką celu:
cron.failureDestinationustawia globalną domyślną wartość dla powiadomień o niepowodzeniu.job.delivery.failureDestinationnadpisuje ją dla konkretnego zadania.- Jeśli żadne z nich nie jest ustawione, a zadanie już dostarcza przez
announce, powiadomienia o niepowodzeniu wracają teraz awaryjnie do tego głównego celu announce. delivery.failureDestinationjest obsługiwane tylko w zadaniach zsessionTarget="isolated", chyba że podstawowym trybem dostarczania jestwebhook.
Przykłady CLI
Jednorazowe przypomnienie (sesja główna):Webhooki
Gateway może udostępniać punkty końcowe HTTP Webhook dla zewnętrznych wyzwalaczy. Włącz w konfiguracji:Uwierzytelnianie
Każde żądanie musi zawierać token hooka w nagłówku:Authorization: Bearer <token>(zalecane)x-openclaw-token: <token>
POST /hooks/wake
Umieść zdarzenie systemowe w kolejce dla sesji głównej:text(wymagane): opis zdarzeniamode(opcjonalne):now(domyślnie) lubnext-heartbeat
POST /hooks/agent
Uruchom izolowany turn agenta:message (wymagane), name, agentId, wakeMode, deliver, channel, to, model, thinking, timeoutSeconds.
Mapowane hooki (POST /hooks/<name>)
Niestandardowe nazwy hooków są rozwiązywane przezhooks.mappings w konfiguracji. Mapowania mogą przekształcać dowolny payload w akcje wake lub agent za pomocą szablonów albo transformacji kodem.
Bezpieczeństwo
- Utrzymuj punkty końcowe hooków za loopbackiem, tailnetem lub zaufanym reverse proxy.
- Używaj dedykowanego tokenu hooka; nie używaj ponownie tokenów autoryzacji gateway.
- Utrzymuj
hooks.pathna dedykowanej podścieżce;/jest odrzucane. - Ustaw
hooks.allowedAgentIds, aby ograniczyć jawne routowanieagentId. - Pozostaw
hooks.allowRequestSessionKey=false, chyba że potrzebujesz sesji wybieranych przez wywołującego. - Jeśli włączysz
hooks.allowRequestSessionKey, ustaw takżehooks.allowedSessionKeyPrefixes, aby ograniczyć dozwolone kształty klucza sesji. - Payloady hooków są domyślnie opakowywane granicami bezpieczeństwa.
Integracja Gmail PubSub
Podłącz wyzwalacze skrzynki Gmail do OpenClaw przez Google PubSub. Wymagania wstępne: CLIgcloud, gog (gogcli), włączone hooki OpenClaw, Tailscale dla publicznego punktu końcowego HTTPS.
Konfiguracja przez kreatora (zalecane)
hooks.gmail, włącza preset Gmail i używa Tailscale Funnel dla punktu końcowego push.
Automatyczne uruchamianie Gateway
Gdyhooks.enabled=true i ustawiono hooks.gmail.account, Gateway uruchamia gog gmail watch serve podczas startu i automatycznie odnawia watch. Ustaw OPENCLAW_SKIP_GMAIL_WATCHER=1, aby z tego zrezygnować.
Ręczna jednorazowa konfiguracja
- Wybierz projekt GCP, który jest właścicielem klienta OAuth używanego przez
gog:
- Utwórz temat i przyznaj Gmailowi dostęp push:
- Uruchom watch:
Nadpisanie modelu Gmail
Zarządzanie zadaniami
openclaw cron add|edit --model ...zmienia wybrany model zadania.- Jeśli model jest dozwolony, dokładnie ten dostawca/model trafia do izolowanego uruchomienia agenta.
- Jeśli nie jest dozwolony, cron wyświetla ostrzeżenie i wraca do wyboru modelu agenta/domyślnego dla zadania.
- Skonfigurowane łańcuchy fallback nadal mają zastosowanie, ale zwykłe nadpisanie
--modelbez jawnej listy fallback per zadanie nie przechodzi już do głównego modelu agenta jako cichego dodatkowego celu ponowienia.
Konfiguracja
cron.store: magazyn .json, taki jak
~/clawd/cron/jobs.json, używa ~/clawd/cron/jobs-state.json, natomiast ścieżka magazynu
bez sufiksu .json dopisuje -state.json.
Wyłącz cron: cron.enabled: false lub OPENCLAW_SKIP_CRON=1.
Ponowienia dla zadań jednorazowych: błędy przejściowe (limit szybkości, przeciążenie, sieć, błąd serwera) są ponawiane maksymalnie 3 razy z wykładniczym backoff. Błędy trwałe powodują natychmiastowe wyłączenie.
Ponowienia dla zadań cyklicznych: wykładniczy backoff (od 30 s do 60 min) między ponowieniami. Backoff resetuje się po następnym udanym uruchomieniu.
Konserwacja: cron.sessionRetention (domyślnie 24h) przycina wpisy sesji izolowanych uruchomień. cron.runLog.maxBytes / cron.runLog.keepLines automatycznie przycinają pliki logów uruchomień.
Rozwiązywanie problemów
Drabinka poleceń
Cron się nie uruchamia
- Sprawdź
cron.enabledi zmienną środowiskowąOPENCLAW_SKIP_CRON. - Potwierdź, że Gateway działa nieprzerwanie.
- Dla harmonogramów
cronzweryfikuj strefę czasową (--tz) względem strefy czasowej hosta. reason: not-duew danych wyjściowych uruchomienia oznacza, że ręczne uruchomienie zostało sprawdzone za pomocąopenclaw cron run <jobId> --duei zadanie nie było jeszcze należne.
Cron uruchomił się, ale nic nie zostało dostarczone
- Tryb dostarczania
noneoznacza, że nie należy oczekiwać awaryjnego wysłania przez runner. Agent nadal może wysłać wiadomość bezpośrednio narzędziemmessage, gdy trasa czatu jest dostępna. - Brakujący/nieprawidłowy cel dostarczania (
channel/to) oznacza, że wysyłka wychodząca została pominięta. - Błędy autoryzacji kanału (
unauthorized,Forbidden) oznaczają, że dostarczanie zostało zablokowane przez poświadczenia. - Jeśli izolowane uruchomienie zwróci tylko cichy token (
NO_REPLY/no_reply), OpenClaw pomija bezpośrednie dostarczanie wychodzące i pomija także awaryjną ścieżkę podsumowania w kolejce, więc nic nie jest publikowane z powrotem na czacie. - Jeśli agent ma sam wysłać wiadomość użytkownikowi, sprawdź, czy zadanie ma używalną
trasę (
channel: "last"z poprzednim czatem albo jawny kanał/cel).
Pułapki związane ze strefą czasową
- Cron bez
--tzużywa strefy czasowej hosta gateway. - Harmonogramy
atbez strefy czasowej są traktowane jako UTC. - Heartbeat
activeHoursużywa skonfigurowanego rozwiązywania strefy czasowej.
Powiązane
- Automatyzacja i zadania — wszystkie mechanizmy automatyzacji w skrócie
- Zadania w tle — rejestr zadań dla wykonań cron
- Heartbeat — okresowe turny sesji głównej
- Strefa czasowa — konfiguracja strefy czasowej