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 webhooka.Szybki start
Jak działa cron
- Cron działa wewnątrz procesu Gateway (nie wewnątrz modelu).
- Zadania są zapisywane w
~/.openclaw/cron/jobs.json, więc ponowne uruchomienia nie powodują utraty harmonogramów. - Wszystkie wykonania cron tworzą rekordy zadań w tle.
- Zadania jednorazowe (
--at) są domyślnie automatycznie usuwane po pomyślnym wykonaniu. - Izolowane uruchomienia cron przy zakończeniu wykonania próbują zamknąć śledzone karty/procesy przeglądarki dla 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 jest tylko tymczasową aktualizacją stanu (
on it,pulling everything togetheri podobne wskazówki) i żadne podrzędne uruchomienie subagenta nie odpowiada już za końcową odpowiedź, OpenClaw ponawia prompt raz, aby uzyskać właściwy 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, aby używać harmonogramu według lokalnego czasu ściennego.
Powtarzające się wyrażenia uruchamiane o pełnej godzinie są automatycznie rozpraszane do 5 minut, aby ograniczyć skoki obciążenia. Użyj --exact, aby wymusić precyzyjne uruchamianie, albo --stagger 30s, aby ustawić jawne okno.
Style wykonania
| Styl | Wartość --session | Uruchamiane w | Najlepsze do |
|---|---|---|---|
| Sesja główna | main | Następny obrót heartbeat | Przypomnienia, zdarzenia systemowe |
| Izolowane | isolated | Dedykowana cron:<jobId> | Raporty, zadania w tle |
| Bieżąca sesja | current | Powiązane podczas tworzenia | Cykliczna praca zależna od kontekstu |
| Sesja niestandardowa | session:custom-id | Trwała nazwana sesja | Przepływy pracy budujące na historii |
--wake now lub --wake next-heartbeat). Zadania izolowane uruchamiają dedykowany obrót 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.
W przypadku zadań izolowanych zamykanie środowiska wykonawczego obejmuje teraz próbę wyczyszczenia przeglądarki dla tej sesji cron. Błędy czyszczenia są ignorowane, aby rzeczywisty wynik cron nadal miał pierwszeństwo.
Gdy izolowane uruchomienia cron koordynują pracę subagentów, dostarczanie także preferuje końcowe dane wyjściowe potomne zamiast nieaktualnego tymczasowego tekstu nadrzędnego. Jeśli potomkowie nadal działają, OpenClaw pomija tę częściową aktualizację nadrzędną zamiast ją ogłaszać.
Opcje ładunku dla zadań izolowanych
--message: tekst promptu (wymagany dla izolowanych)--model/--thinking: nadpisania modelu i poziomu myślenia--light-context: pomiń wstrzykiwanie pliku 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 i zamiast tego wraca do wyboru modelu agenta/domyślnego dla zadania. Skonfigurowane łańcuchy fallbacków nadal obowiązują, ale zwykłe nadpisanie modelu bez jawnej listy fallbacków dla zadania nie dołącza już podstawowego modelu agenta jako ukrytego dodatkowego celu ponowienia.
Kolejność pierwszeństwa wyboru modelu dla zadań izolowanych jest następująca:
- Nadpisanie modelu hooka Gmail (gdy uruchomienie pochodzi z Gmaila i to nadpisanie jest dozwolone)
modelw ładunku dla danego zadania- Zapisane nadpisanie modelu sesji cron
- Wybór modelu agenta/domyślnego
params.fastMode, izolowany cron domyślnie go używa. Zapisane nadpisanie fastMode dla sesji nadal ma pierwszeństwo wobec konfiguracji w obu kierunkach.
Jeśli izolowane uruchomienie napotka przekazanie do aktywnego przełączenia modelu, cron ponawia próbę z przełączonym dostawcą/modelem i zapisuje ten bieżący wybór przed ponowieniem. Gdy przełączenie obejmuje także nowy profil uwierzytelniania, cron zapisuje również to nadpisanie profilu uwierzytelniania. Liczba ponowień jest ograniczona: po początkowej próbie oraz 2 ponowieniach przełączenia cron przerywa działanie zamiast zapętlać się bez końca.
Dostarczanie i dane wyjściowe
| Tryb | Co się dzieje |
|---|---|
announce | Dostarcza podsumowanie do docelowego kanału (domyślnie dla izolowanych) |
webhook | Wysyła ładunek zdarzenia zakończenia metodą POST na URL |
none | Tylko wewnętrznie, bez dostarczania |
--announce --channel telegram --to "-1001234567890" do dostarczania do kanału. W przypadku tematów forum Telegram użyj -1001234567890:topic:123. Cele Slack/Discord/Mattermost powinny używać jawnych prefiksów (channel:<id>, user:<id>).
Dla izolowanych zadań zarządzanych przez cron ścieżką końcowego dostarczenia zarządza wykonawca. Agent otrzymuje prompt, aby zwrócić podsumowanie w postaci zwykłego tekstu, a następnie to podsumowanie jest wysyłane przez announce, webhook lub pozostaje wewnętrzne dla none. --no-deliver nie przekazuje dostarczania z powrotem agentowi; utrzymuje uruchomienie jako wewnętrzne.
Jeśli oryginalne zadanie wyraźnie nakazuje wysłanie wiadomości do jakiegoś zewnętrznego odbiorcy, agent powinien wskazać w swoich danych wyjściowych, do kogo/gdzie ta wiadomość powinna trafić, zamiast próbować wysłać ją bezpośrednio.
Powiadomienia o niepowodzeniu korzystają z oddzielnej ścieżki docelowej:
cron.failureDestinationustawia globalną wartość domyślną 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 teraz wracają domyślnie do tego głównego celu announce. delivery.failureDestinationjest obsługiwane tylko dla zadań 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 webhooków HTTP 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
Umieszcza zdarzenie systemowe w kolejce dla sesji głównej:text(wymagane): opis zdarzeniamode(opcjonalne):now(domyślnie) lubnext-heartbeat
POST /hooks/agent
Uruchamia izolowany obrót agenta:message (wymagane), name, agentId, wakeMode, deliver, channel, to, model, thinking, timeoutSeconds.
Zmapowane hooki (POST /hooks/<name>)
Niestandardowe nazwy hooków są rozstrzygane przezhooks.mappings w konfiguracji. Mapowania mogą przekształcać dowolne ładunki na akcje wake lub agent przy użyciu 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 uwierzytelniania gateway.
- Utrzymuj
hooks.pathna dedykowanej podścieżce;/jest odrzucane. - Ustaw
hooks.allowedAgentIds, aby ograniczyć jawne trasowanieagentId. - Utrzymuj
hooks.allowRequestSessionKey=false, chyba że potrzebujesz sesji wybieranych przez wywołującego. - Jeśli włączysz
hooks.allowRequestSessionKey, ustaw teżhooks.allowedSessionKeyPrefixes, aby ograniczyć dozwolone kształty kluczy sesji. - Ładunki hooków są domyślnie opakowywane granicami bezpieczeństwa.
Integracja Gmail PubSub
Podłącz wyzwalacze skrzynki odbiorczej Gmail do OpenClaw przez Google PubSub. Wymagania wstępne: CLIgcloud, gog (gogcli), włączone hooki OpenClaw, Tailscale dla publicznego punktu końcowego HTTPS.
Konfiguracja kreatorem (zalecane)
hooks.gmail, włącza preset Gmail i używa Tailscale Funnel dla punktu końcowego push.
Automatyczne uruchamianie Gateway
Gdyhooks.enabled=true i hooks.gmail.account jest ustawione, Gateway uruchamia gog gmail watch serve podczas startu i automatycznie odnawia obserwację. 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 obserwację:
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ów nadal obowiązują, ale zwykłe nadpisanie
--modelbez jawnej listy fallbacków dla zadania nie przechodzi już do modelu podstawowego agenta jako cichego dodatkowego celu ponowienia.
Konfiguracja
cron.enabled: false lub OPENCLAW_SKIP_CRON=1.
Ponowienie zadania jednorazowego: błędy przejściowe (limit żądań, przeciążenie, sieć, błąd serwera) są ponawiane maksymalnie 3 razy z wykładniczym opóźnieniem. Błędy trwałe natychmiast wyłączają zadanie.
Ponowienie zadania cyklicznego: wykładnicze opóźnienie (od 30 s do 60 min) między kolejnymi próbami. Opóźnienie zeruje się po następnym udanym uruchomieniu.
Utrzymanie: cron.sessionRetention (domyślnie 24h) usuwa wpisy sesji izolowanych uruchomień. cron.runLog.maxBytes / cron.runLog.keepLines automatycznie przycinają pliki dzienników uruchomień.
Rozwiązywanie problemów
Sekwencja poleceń
Cron się nie uruchamia
- Sprawdź
cron.enabledi zmienną środowiskowąOPENCLAW_SKIP_CRON. - Potwierdź, że Gateway działa nieprzerwanie.
- W przypadku 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 przezopenclaw cron run <jobId> --due, a zadanie nie było jeszcze wymagalne.
Cron uruchomił się, ale nic nie dostarczono
- Tryb dostarczania
noneoznacza, że nie należy oczekiwać żadnej zewnętrznej wiadomości. - Brakujący/nieprawidłowy cel dostarczania (
channel/to) oznacza, że wysyłka została pominięta. - Błędy uwierzytelniania 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, a także pomija awaryjną ścieżkę podsumowania w kolejce, więc nic nie zostanie opublikowane z powrotem na czacie. - W przypadku izolowanych zadań zarządzanych przez cron nie oczekuj, że agent użyje narzędzia wiadomości jako fallbacku. Wykonawca zarządza końcowym dostarczeniem;
--no-deliverutrzymuje je jako wewnętrzne zamiast zezwalać na bezpośrednią wysyłkę.
Pułapki związane ze strefami czasowymi
- Cron bez
--tzużywa strefy czasowej hosta gateway. - Harmonogramy
atbez strefy czasowej są traktowane jako UTC. activeHoursheartbeat używa skonfigurowanego rozstrzygania strefy czasowej.
Powiązane
- Automatyzacja i zadania — wszystkie mechanizmy automatyzacji w skrócie
- Zadania w tle — rejestr zadań dla wykonań cron
- Heartbeat — okresowe obroty sesji głównej
- Strefa czasowa — konfiguracja strefy czasowej