API hosting

Cron job hosting.

Scheduled-job products built on serverless functions have a habit of missing a beat: cold starts push the actual run a few seconds late, or a job that runs long gets killed before it finishes. DenkOps ships two native ways to schedule work instead, both running on a real always-on slot with standard 5-field cron, default UTC, so the run actually fires on time.

denkops.cron · in-process

Schedule from inside your Bun app with the DenkOps SDK. Restart-safe, state lives on /persist. Best when the job is code in your app.

import { denkops } from "@denkopsai/sdk";

denkops.cron("0 2 * * *", async () => {
  await runNightlyReport();
}, { name: "nightly", timezone: "UTC" });
Managed declarative cron

Any runtime, Bun or Python. Declare the schedule in denkops.json and DenkOps calls the path for you, visible from the dashboard and MCP.

{
  "cron": [{
    "schedule": "0 2 * * *",
    "path": "/jobs/nightly",
    "method": "POST",
    "timezone": "UTC",
    "name": "nightly"
  }]
}

Both paths run on the same always-on slot: log what a run did to /persist so a restart doesn't lose the history, and add only the destinations the job calls out to, an email API, a Slack webhook, a database, to the egress allowlist. Managed jobs also show up in the dashboard's Scheduled jobs panel and can be re-run on demand with the MCP run_cron tool.

Start on DenkOps →

FAQ

Does DenkOps have a managed cron product, or do I have to run my own scheduler?

Both are native. denkops.cron is an in-process helper in the DenkOps SDK: call it with a 5-field schedule and a handler inside your Bun app, and it runs there, restart-safe, with state kept on /persist. Managed declarative cron works for any runtime, Bun or Python: list a schedule in denkops.json and DenkOps calls your app's path on time, visible and manually triggerable from the dashboard's Scheduled jobs panel or the MCP list_crons and run_cron tools. Use denkops.cron when the job is code in your app, use managed cron for Python, cross-runtime jobs, or when you want platform visibility and a manual re-run button.

What happens if my scheduled job overlaps or runs long?

denkops.cron takes an overlap option to skip or queue a run that's still going, and a catchUp option to control whether a missed run replays after a restart, both backed by state on the durable /persist disk. There's no per-invocation timeout on either path, a long run is between your code and the slot's CPU and RAM, not a platform limit.

← API hosting · Express cron job guide · FastAPI cron job guide