Skip to content
Talk to our solutions team

Operations

Terminal window
jobs.svc # orchestrator — triggers + HTTP API
jobs.svc agent # worker agent
jobs.svc version

An orchestrator runs an embedded agent when the boot config has a localagent: block. Flags: -f/--config (default .jobs.yaml), -p/--port, --sid, --datacenter, --cluster, --config_url, --config_apikey, --servicediscovery_url, --servicediscovery_apikey, --svccert, --svckey, --rootcacert, --jwt_public_key, --zerotrust.

There is no config list / config generate subcommand — write .jobs.yaml directly.

port: 8080
grpc: 9090 # orchestrator gRPC port (required)
serviceid: jobs-01
loadtenants: [] # tenants to warm at start
defaultjobsaccess: false # allow jobs that declare no access rule
orchestrator:
queue:
maxdepth: 10000 # submission queue cap (FIFO, drop-oldest)
minio: # object storage for large job-run logs
url: minio.internal:9000
accesskey: vault:minio-access
secretkey: vault:minio-secret
bucket: jobrunlogs
secure: true
jobsuser: jobs # OS user the sandboxed process runs as (Linux)
applycgroups: true # Linux only; forced false elsewhere
localagent: # optional embedded agent
id: agent-01
serverurl: https://jobs.internal:9090
heartbeatduration: 15s

Agent-mode config (jobs.svc agent): sid, grpc, serverurl (required), heartbeatduration, infrahost, grpcaddress, httpaddress, tenants, exclusive, max_concurrent_tasks.

On Linux with applycgroups: true, each run executes as a child process under a dedicated cgroup:

  • runs as the jobsuser OS user;
  • memory and CPU bounded by the job’s constraints;
  • network and filesystem denied unless the job declares the matching capabilities.

On macOS/Windows the script runs in-process without cgroup isolation — use those platforms for development only.

  • The executor caps concurrent job runs (semaphore, default 100).
  • The submission queue is bounded (default 10000), FIFO.
  • Git-poll triggers skip a tick if the previous run for that trigger is still in flight.
  • GET /jobs — the active definitions the tenant loaded.
  • GET /runs?id=<ulid> or ?filter=<expr>&page=&pagesize= — run records with status, payload, and logs.
  • Logs: inline for small output; larger output is uploaded to the configured object store and linked from the run record. The return value is always in logs.result.

Schema is embedded and applied per tenant through the data plane. Job-run logs over ~16 KB offload to object storage (MinIO/S3); configure minio.* or they stay inline.

GET /health, GET /ready. Metrics are emitted under the kis.jobs.* namespace (submit/exec/trigger counts and durations), though trigger metrics are recorded only for webhook and scheduled triggers today.

config (boot + tenant config), meta (definition delivery), IAM (JWT verification), Vault (DB-pool and provider secrets), PostgreSQL (tenant data), an object store (large-log offload), and at least one worker (embedded or standalone agent).