node-cron only fires reliably if the Node process hosting it is actually alive at the scheduled minute, something you can't guarantee on a platform that suspends your app between requests. A DenkOps slot runs Express continuously, so a node-cron schedule wired up next to your routes ticks on time every time, with no external scheduler required. DenkOps also offers a more DenkOps-native alternative, managed declarative cron: declare the schedule in denkops.json and DenkOps calls a route your Express app already serves, no cron library in the process at all, and every run is visible and manually triggerable from the dashboard's Scheduled jobs panel or the MCP list_crons and run_cron tools.
import express from "express";
import cron from "node-cron";
const app = express();
cron.schedule("0 2 * * *", () => {
console.log("running nightly report", new Date().toISOString());
});
app.get("/health", (_req, res) => res.json({ ok: true }));
app.listen(3000);
// Alternative: DenkOps managed declarative cron, no cron library needed.
// denkops.json
// {
// "cron": [
// { "schedule": "0 2 * * *", "path": "/jobs/nightly", "method": "POST", "timezone": "UTC", "name": "nightly" }
// ]
// }
app.post("/jobs/nightly", (_req, res) => {
console.log("running nightly report", new Date().toISOString());
res.json({ ok: true });
});Deploy it: install the plugin, say "deploy on DenkOps", and get a live SSL URL.
Start on DenkOps →Yes. Because the slot keeps your Express process running around the clock, node-cron's in-process schedule fires exactly on time with no separate cron infra.
No. Unlike a serverless cron function capped at a few minutes, a job running inside your always-on slot can take as long as it needs to finish.
No, not necessarily. DenkOps also supports managed declarative cron: list a schedule and a path in denkops.json and DenkOps calls that route directly, no cron library in the process, and the run is visible and manually triggerable from the dashboard's Scheduled jobs panel or the MCP list_crons and run_cron tools.