Automation and tasks
Tugas terjadwal
Cron adalah penjadwal bawaan Gateway. Cron mempertahankan job, membangunkan agen pada waktu yang tepat, dan dapat mengirimkan output kembali ke kanal chat atau endpoint Webhook.
Mulai cepat
Tambahkan pengingat sekali jalan
openclaw cron add \
--name "Reminder" \
--at "2026-02-01T16:00:00Z" \
--session main \
--system-event "Reminder: check the cron docs draft" \
--wake now \
--delete-after-run
Periksa job Anda
openclaw cron list
openclaw cron show <job-id>
Lihat riwayat run
openclaw cron runs --id <job-id>
Cara kerja cron
- Cron berjalan di dalam proses Gateway (bukan di dalam model).
- Definisi job dipertahankan di
~/.openclaw/cron/jobs.jsonsehingga restart tidak menghilangkan jadwal. - 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 yang lebih lama dapat membaca
jobs.jsontetapi mungkin memperlakukan job sebagai baru karena kolom runtime kini berada dijobs-state.json. - Saat
jobs.jsondiedit ketika Gateway berjalan atau berhenti, OpenClaw membandingkan kolom jadwal yang berubah dengan metadata slot runtime yang tertunda dan menghapus nilainextRunAtMsyang kedaluwarsa. Penulisan ulang yang hanya mengubah format atau urutan kunci mempertahankan slot tertunda. - Semua eksekusi cron membuat catatan tugas latar belakang.
- Saat Gateway dimulai, job giliran agen terisolasi yang sudah lewat jadwal dijadwalkan ulang keluar dari jendela koneksi kanal alih-alih diputar ulang segera, sehingga startup Discord/Telegram dan penyiapan perintah native tetap responsif setelah restart.
- Job sekali jalan (
--at) otomatis dihapus setelah berhasil secara default. - Run cron terisolasi secara best-effort menutup tab/proses browser yang dilacak untuk sesi
cron:<jobId>miliknya saat run selesai, sehingga otomasi browser yang terlepas tidak meninggalkan proses yatim. - Run cron terisolasi yang menerima grant pembersihan mandiri cron yang sempit tetap dapat membaca status penjadwal dan daftar job saat ini yang difilter untuk dirinya sendiri, sehingga pemeriksaan status/Heartbeat dapat memeriksa jadwalnya sendiri tanpa memperoleh akses mutasi cron yang lebih luas.
- Run cron terisolasi juga melindungi dari balasan pengakuan yang kedaluwarsa. Jika hasil pertama hanya pembaruan status sementara (
on it,pulling everything together, dan petunjuk serupa) dan tidak ada run subagen turunan yang masih bertanggung jawab atas jawaban akhir, OpenClaw meminta ulang sekali untuk hasil sebenarnya sebelum pengiriman. - Run cron terisolasi lebih memilih metadata penolakan eksekusi terstruktur dari run tertanam, lalu fallback ke penanda ringkasan/output akhir yang dikenal seperti
SYSTEM_RUN_DENIEDdanINVALID_REQUEST, sehingga perintah yang diblokir tidak dilaporkan sebagai run hijau. - Run cron terisolasi juga memperlakukan kegagalan agen tingkat run sebagai error job meskipun tidak ada payload balasan yang dihasilkan, sehingga kegagalan model/provider menambah penghitung error dan memicu notifikasi kegagalan alih-alih menghapus job sebagai berhasil.
- Saat job giliran agen terisolasi mencapai
timeoutSeconds, cron membatalkan run agen yang mendasarinya dan memberinya jendela pembersihan singkat. Jika run tidak selesai dikosongkan, pembersihan milik Gateway menghapus paksa kepemilikan sesi run tersebut sebelum cron mencatat timeout, sehingga pekerjaan chat yang diantrekan tidak tertinggal di belakang sesi pemrosesan yang kedaluwarsa.
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 kolom atau 6 kolom dengan --tz opsional |
Timestamp tanpa zona waktu diperlakukan sebagai UTC. Tambahkan --tz America/New_York untuk penjadwalan waktu dinding lokal.
Ekspresi berulang tepat di awal jam otomatis disebar hingga 5 menit untuk mengurangi lonjakan beban. Gunakan --exact untuk memaksa waktu presisi atau --stagger 30s untuk jendela eksplisit.
Hari-dalam-bulan dan hari-dalam-minggu menggunakan logika OR
Ekspresi cron diurai oleh croner. Saat kolom hari-dalam-bulan dan hari-dalam-minggu sama-sama bukan wildcard, croner cocok ketika salah satu kolom cocok — bukan keduanya. Ini adalah perilaku cron Vixie standar.
# Intended: "9 AM on the 15th, only if it's a Monday"
# Actual: "9 AM on every 15th, AND 9 AM on every Monday"
0 9 15 * 1
Ini berjalan sekitar 5–6 kali per bulan, bukan 0–1 kali per bulan. OpenClaw menggunakan perilaku OR default Croner di sini. Untuk mewajibkan kedua kondisi, gunakan modifier hari-dalam-minggu + milik Croner (0 9 15 * +1) atau jadwalkan pada satu kolom dan lindungi kolom lainnya dalam prompt atau perintah job Anda.
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 |
Diikat saat pembuatan | Pekerjaan berulang yang sadar konteks |
| Sesi kustom | session:custom-id |
Sesi bernama persisten | Workflow yang membangun berdasarkan riwayat |
Sesi utama vs terisolasi vs kustom
Job sesi utama mengantrekan peristiwa sistem dan secara opsional membangunkan Heartbeat (--wake now atau --wake next-heartbeat). Peristiwa sistem tersebut tidak memperpanjang freshness reset harian/idle untuk sesi target. Job terisolasi menjalankan giliran agen khusus dengan sesi baru. Sesi kustom (session:xxx) mempertahankan konteks lintas run, memungkinkan workflow seperti standup harian yang membangun berdasarkan ringkasan sebelumnya.
Apa arti 'sesi baru' untuk job terisolasi
Untuk job terisolasi, "sesi baru" berarti id transcript/sesi baru untuk setiap run. 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 yang lebih lama: routing kanal/grup, kebijakan kirim atau antre, elevation, asal, atau binding runtime ACP. Gunakan current atau session:<id> saat job berulang harus sengaja membangun berdasarkan konteks percakapan yang sama.
Pembersihan runtime
Untuk job terisolasi, teardown runtime kini mencakup pembersihan browser best-effort untuk sesi cron tersebut. Kegagalan pembersihan diabaikan sehingga hasil cron sebenarnya tetap menang.
Run cron terisolasi juga membuang setiap instance runtime MCP bundled yang dibuat untuk job melalui jalur pembersihan runtime bersama. Ini sesuai dengan cara klien MCP sesi utama dan sesi kustom di-teardown, sehingga job cron terisolasi tidak membocorkan proses anak stdio atau koneksi MCP berumur panjang lintas run.
Pengiriman subagen dan Discord
Saat run cron terisolasi mengorkestrasi subagen, pengiriman juga lebih memilih output turunan akhir daripada teks sementara induk yang kedaluwarsa. Jika turunan masih berjalan, OpenClaw menekan pembaruan induk parsial tersebut alih-alih mengumumkannya.
Untuk target pengumuman Discord teks saja, OpenClaw mengirim teks asisten akhir kanonis sekali alih-alih memutar ulang payload teks streaming/perantara dan jawaban akhir sekaligus. Payload media dan Discord terstruktur tetap dikirim sebagai payload terpisah sehingga lampiran dan komponen tidak dibuang.
Opsi payload untuk job terisolasi
--messagestringrequiredTeks prompt (wajib untuk terisolasi).
--modelstringOverride model; menggunakan model yang diizinkan dan dipilih untuk job.
--thinkingstringOverride tingkat thinking.
--light-contextbooleanLewati injeksi file bootstrap workspace.
--toolsstringBatasi tool 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: rantai fallback terkonfigurasi tetap berlaku saat model utama job gagal. Jika model yang diminta tidak diizinkan atau tidak dapat di-resolve, cron menggagalkan run dengan error validasi eksplisit alih-alih diam-diam fallback ke pemilihan model agen/default job.
Jika entri jobs.json lama atau yang diedit manual menyimpan payload.model sebagai "default", "null", string kosong, atau JSON null, jalankan openclaw doctor --fix. Doctor menghapus sentinel override tersimpan yang tidak valid tersebut; runtime tidak mendukungnya sebagai alias fallback. Hilangkan kolom model untuk menggunakan pemilihan model agen/default normal.
Job cron juga dapat membawa fallbacks tingkat payload. Jika ada, daftar tersebut menggantikan rantai fallback terkonfigurasi untuk job. Gunakan fallbacks: [] dalam payload/API job saat Anda menginginkan run cron ketat yang hanya mencoba model yang dipilih. Jika job memiliki --model tetapi tidak memiliki fallback payload maupun terkonfigurasi, OpenClaw meneruskan override fallback kosong eksplisit sehingga model utama agen tidak ditambahkan sebagai target percobaan ulang ekstra yang tersembunyi.
Prioritas pemilihan model untuk job terisolasi adalah:
- Override model hook Gmail (saat run berasal dari Gmail dan override tersebut diizinkan)
modelpayload per job- Override model sesi cron tersimpan yang dipilih pengguna
- Pemilihan model agen/default
Mode cepat juga mengikuti pilihan live yang di-resolve. Jika konfigurasi model yang dipilih memiliki params.fastMode, cron terisolasi menggunakannya secara default. Override fastMode sesi tersimpan tetap menang atas konfigurasi di kedua arah.
Jika run terisolasi mengalami handoff pergantian model live, cron mencoba ulang dengan provider/model yang diganti dan mempertahankan pilihan live tersebut untuk run aktif sebelum mencoba ulang. Saat pergantian juga membawa profil auth baru, cron juga mempertahankan override profil auth tersebut untuk run aktif. Percobaan ulang dibatasi: setelah upaya awal ditambah 2 percobaan ulang pergantian, cron membatalkan alih-alih berulang selamanya.
Sebelum run cron terisolasi masuk ke runner agen, OpenClaw memeriksa endpoint provider lokal yang dapat dijangkau untuk provider api: "ollama" dan api: "openai-completions" terkonfigurasi yang baseUrl-nya adalah loopback, jaringan privat, atau .local. Jika endpoint tersebut down, run dicatat sebagai skipped dengan error provider/model yang jelas alih-alih memulai panggilan model. Hasil endpoint di-cache selama 5 menit, sehingga banyak job jatuh tempo yang menggunakan server Ollama, vLLM, SGLang, atau LM Studio lokal mati yang sama berbagi satu probe kecil alih-alih membuat badai permintaan. Run provider-preflight yang dilewati tidak menambah backoff error eksekusi; aktifkan failureAlert.includeSkipped saat Anda menginginkan notifikasi skip berulang.
Pengiriman dan output
| Mode | Yang terjadi |
|---|---|
announce |
Mengirim teks akhir cadangan ke target jika agen tidak mengirim |
webhook |
POST payload peristiwa selesai ke sebuah URL |
none |
Tidak ada pengiriman cadangan oleh penjalan |
Gunakan --announce --channel telegram --to "-1001234567890" untuk pengiriman kanal. 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 harus 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.
Ketika pengiriman announce menggunakan channel: "last" atau menghilangkan channel, target berprefiks penyedia seperti telegram:123 dapat memilih kanal sebelum cron kembali ke riwayat sesi atau satu kanal yang dikonfigurasi. Hanya prefiks yang diiklankan oleh Plugin yang dimuat yang menjadi pemilih penyedia. Jika delivery.channel eksplisit, prefiks target harus menamai 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 merupakan sintaks target milik kanal, bukan pemilih penyedia.
Untuk pekerjaan terisolasi, pengiriman chat dibagikan. Jika rute chat tersedia, agen dapat menggunakan alat message bahkan ketika pekerjaan menggunakan --no-deliver. Jika agen mengirim ke target yang dikonfigurasi/saat ini, OpenClaw melewati announce cadangan. Jika tidak, announce, webhook, dan none hanya mengontrol apa yang dilakukan penjalan dengan balasan akhir setelah giliran agen.
Ketika agen membuat pengingat terisolasi dari chat aktif, OpenClaw menyimpan target pengiriman live yang dipertahankan untuk rute announce cadangan. Kunci sesi internal mungkin huruf kecil; target pengiriman penyedia tidak direkonstruksi dari kunci tersebut ketika konteks chat saat ini tersedia.
Pengiriman announce implisit menggunakan allowlist kanal yang dikonfigurasi untuk memvalidasi dan merutekan ulang target usang. Persetujuan toko pemasangan DM bukan penerima otomasi cadangan; atur delivery.to atau konfigurasikan entri allowFrom kanal ketika pekerjaan terjadwal harus secara proaktif mengirim ke DM.
Notifikasi kegagalan mengikuti jalur tujuan terpisah:
cron.failureDestinationmenetapkan default global untuk notifikasi kegagalan.job.delivery.failureDestinationmenimpanya per pekerjaan.- Jika keduanya tidak ditetapkan dan pekerjaan sudah mengirim melalui
announce, notifikasi kegagalan kini kembali ke target announce utama tersebut. delivery.failureDestinationhanya didukung pada pekerjaansessionTarget="isolated"kecuali mode pengiriman utama adalahwebhook.failureAlert.includeSkipped: truemengikutsertakan pekerjaan atau kebijakan peringatan cron global ke peringatan eksekusi yang dilewati secara berulang. Eksekusi yang dilewati mempertahankan penghitung lewati beruntun yang terpisah, sehingga tidak memengaruhi backoff kesalahan eksekusi.
Contoh CLI
Pengingat sekali jalan
openclaw cron add \
--name "Calendar check" \
--at "20m" \
--session main \
--system-event "Next heartbeat: check calendar." \
--wake now
Pekerjaan terisolasi berulang
openclaw cron add \
--name "Morning brief" \
--cron "0 7 * * *" \
--tz "America/Los_Angeles" \
--session isolated \
--message "Summarize overnight updates." \
--announce \
--channel slack \
--to "channel:C1234567890"
Override model dan pemikiran
openclaw cron add \
--name "Deep analysis" \
--cron "0 6 * * 1" \
--tz "America/Los_Angeles" \
--session isolated \
--message "Weekly deep analysis of project progress." \
--model "opus" \
--thinking high \
--announce
Webhook
Gateway dapat mengekspos endpoint Webhook HTTP untuk pemicu eksternal. Aktifkan dalam konfigurasi:
{
hooks: {
enabled: true,
token: "shared-secret",
path: "/hooks",
},
}
Autentikasi
Setiap permintaan harus menyertakan token hook melalui header:
Authorization: Bearer <token>(direkomendasikan)x-openclaw-token: <token>
Token query-string ditolak.
POST /hooks/wake
Antrekan peristiwa sistem untuk sesi utama:
curl -X POST http://127.0.0.1:18789/hooks/wake \
-H 'Authorization: Bearer SECRET' \
-H 'Content-Type: application/json' \
-d '{"text":"New email received","mode":"now"}'
textstringrequiredDeskripsi peristiwa.
modestringnow atau next-heartbeat.
POST /hooks/agent
Jalankan giliran agen terisolasi:
curl -X POST http://127.0.0.1:18789/hooks/agent \
-H 'Authorization: Bearer SECRET' \
-H 'Content-Type: application/json' \
-d '{"message":"Summarize inbox","name":"Email","model":"openai/gpt-5.4"}'
Bidang: message (wajib), name, agentId, wakeMode, deliver, channel, to, model, fallbacks, thinking, timeoutSeconds.
OPENCLAW_DOCS_MARKER:accordionOpen:IHRpdGxlPSJIb29rIHlhbmcgZGlwZXRha2FuIChQT1NUIC9ob29rcy88bmFtZQ
)">
Nama hook kustom diselesaikan melalui hooks.mappings dalam konfigurasi. Pemetaan dapat mengubah payload apa pun menjadi tindakan wake atau agent dengan templat atau transformasi kode.
Integrasi Gmail PubSub
Hubungkan pemicu kotak masuk Gmail ke OpenClaw melalui Google PubSub.
Penyiapan wizard (direkomendasikan)
openclaw webhooks gmail setup --account [email protected]
Ini menulis konfigurasi hooks.gmail, mengaktifkan preset Gmail, dan menggunakan Tailscale Funnel untuk endpoint push.
Mulai otomatis Gateway
Ketika hooks.enabled=true dan hooks.gmail.account ditetapkan, Gateway memulai gog gmail watch serve saat boot dan memperpanjang watch secara otomatis. Atur OPENCLAW_SKIP_GMAIL_WATCHER=1 untuk keluar.
Penyiapan satu kali manual
Pilih proyek GCP
Pilih proyek GCP yang memiliki klien OAuth yang digunakan oleh gog:
gcloud auth login
gcloud config set project <project-id>
gcloud services enable gmail.googleapis.com pubsub.googleapis.com
Buat topik dan berikan akses push Gmail
gcloud pubsub topics create gog-gmail-watch
gcloud pubsub topics add-iam-policy-binding gog-gmail-watch \
--member=serviceAccount:[email protected] \
--role=roles/pubsub.publisher
Mulai watch
gog gmail watch start \
--account [email protected] \
--label INBOX \
--topic projects/<project-id>/topics/gog-gmail-watch
Override model Gmail
{
hooks: {
gmail: {
model: "openrouter/meta-llama/llama-3.3-70b-instruct:free",
thinking: "off",
},
},
}
Mengelola pekerjaan
# List all jobs
openclaw cron list
# Show one job, including resolved delivery route
openclaw cron show <jobId>
# Edit a job
openclaw cron edit <jobId> --message "Updated prompt" --model "opus"
# Force run a job now
openclaw cron run <jobId>
# Run only if due
openclaw cron run <jobId> --due
# View run history
openclaw cron runs --id <jobId> --limit 50
# Delete a job
openclaw cron remove <jobId>
# Agent selection (multi-agent setups)
openclaw cron add --name "Ops sweep" --cron "0 6 * * *" --session isolated --message "Check ops queue" --agent ops
openclaw cron edit <jobId> --clear-agent
Konfigurasi
{
cron: {
enabled: true,
store: "~/.openclaw/cron/jobs.json",
maxConcurrentRuns: 1,
retry: {
maxAttempts: 3,
backoffMs: [60000, 120000, 300000],
retryOn: ["rate_limit", "overloaded", "network", "server_error"],
},
webhookToken: "replace-with-dedicated-webhook-token",
sessionRetention: "24h",
runLog: { maxBytes: "2mb", keepLines: 2000 },
},
}
maxConcurrentRuns membatasi pengiriman cron terjadwal sekaligus eksekusi giliran agen terisolasi. Giliran agen cron terisolasi menggunakan jalur eksekusi khusus cron-nested milik antrean secara internal, sehingga menaikkan nilai ini memungkinkan eksekusi LLM cron independen berjalan secara paralel alih-alih hanya memulai pembungkus cron luarnya. Jalur bersama non-cron nested tidak diperluas 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 pekerjaan yang diedit secara eksternal memerlukan nextRunAtMs baru.
Nonaktifkan cron: cron.enabled: false atau OPENCLAW_SKIP_CRON=1.
Perilaku percobaan ulang
Percobaan ulang sekali jalan: kesalahan sementara (batas laju, overload, jaringan, kesalahan server) dicoba ulang hingga 3 kali dengan backoff eksponensial. Kesalahan permanen langsung menonaktifkan.
Percobaan ulang berulang: backoff eksponensial (30 dtk hingga 60 mnt) antar percobaan ulang. Backoff direset setelah eksekusi berhasil berikutnya.
Pemeliharaan
cron.sessionRetention (default 24h) memangkas entri sesi eksekusi terisolasi. cron.runLog.maxBytes / cron.runLog.keepLines memangkas file log eksekusi secara otomatis.
Pemecahan masalah
Tangga perintah
openclaw status
openclaw gateway status
openclaw cron status
openclaw cron list
openclaw cron runs --id <jobId> --limit 20
openclaw system heartbeat last
openclaw logs --follow
openclaw doctor
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-duedalam output eksekusi berarti eksekusi manual diperiksa denganopenclaw cron run <jobId> --duedan pekerjaan belum jatuh tempo.
Cron aktif tetapi tidak ada pengiriman
- Mode pengiriman
noneberarti tidak ada pengiriman fallback runner yang diharapkan. Agen tetap dapat mengirim langsung dengan alatmessageketika rute chat tersedia. - Target pengiriman tidak ada/tidak valid (
channel/to) berarti outbound dilewati. - Untuk Matrix, job yang disalin atau legacy dengan ID ruang
delivery.toberhuruf kecil dapat gagal karena ID ruang Matrix peka huruf besar-kecil. Edit job ke nilai persis!room:serveratauroom:!room:serverdari Matrix. - Kesalahan autentikasi 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 agen harus mengirim pesan kepada 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
- 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 JSONL transkrip ketika file masih tersedia. Baris idle legacy tanpalastInteractionAtmenggunakan waktu mulai yang dipulihkan itu sebagai baseline idle mereka.
Kendala 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 & Tugas — semua mekanisme automasi secara sekilas
- Tugas Latar Belakang — ledger tugas untuk eksekusi cron
- Heartbeat — giliran sesi utama berkala
- Zona Waktu — konfigurasi zona waktu