cronoq-server
Runs the cronoq scheduler as a service:
- clients submit tasks over gRPC or HTTP/JSON;
- remote workers in any language lease tasks over a bidirectional gRPC stream (worker protocol v3), with heartbeats, aborts, hand-backs, worker labels and automatic retry of lost attempts;
- pools autoscale on queue pressure and export the desired worker count for KEDA/HPA, or call a webhook;
- bearer tokens and client certificates mapped to
client/worker/metrics/adminroles, optionally limited to pools; TLS and mTLS on both listeners; - request limits on everything (queues, batch and message sizes, waits, connections);
- Prometheus
/metrics(authenticated, or on a separate internal port),/healthz,/readyz; - with the Postgres or SQLite store, durable state and active-passive high availability with leader election and fencing.
The cronoq command-line client submits and inspects
tasks and shows the server live with cronoq top.
# or: docker run -p 7070:7070 -p 7071:7071 -e CRONOQ_CLIENT_TOKEN ... ghcr.io/synaptiai/cronoq
Without --config the server runs a single default pool on loopback with authentication
disabled. Listening on other addresses requires [[auth.tokens]] (or --insecure-no-auth on a
trusted network). cronoq-server --print-proto prints the API definition.
The crate also provides a Rust worker client:
use Bytes;
use ;
# async
run_worker enforces the granted slots, heartbeats each lease, cancels handlers on abort,
reconnects with backoff (also when the server steps down), and drains on shutdown.
- 📘 Server quickstart
- ⚙️ Configuration reference
- 🌐 HTTP and gRPC references
- 🚀 Deployment guide
- 🔒 Security hardening
Licensed under MIT or Apache-2.0, at your option.