ZymuraBlog

Guides · 19 August 2026 · 8 min read

How to run a script on a schedule without a server

The twenty-line script is never the work. Six questions the code does not answer, and four honest ways to answer them.

The script takes twenty minutes. Everything around it takes a week.

You want something to happen every morning at eight: pull yesterday's numbers, summarise them, post the summary to a channel. The code is maybe twenty lines. So why does this routinely become a multi-day job?

Because the script is the easy part.

What the script does not include

Write the twenty lines and you immediately own a list of questions the code does not answer:

Do it yourself Scheduled service a box to run it oncron entrysomewhere for the tokenretry on failurealertinglog storagea schedulethe flow 6 things to keep alive 2 things to describe
What you maintain, either way

Each of those is individually small and collectively the reason the job takes a week. None of them is the interesting bit, and all of them are things you keep maintaining afterwards.

The options, honestly compared

Cron on a VPS

Cheapest in cash, most expensive in attention. You own the OS, the patching, the disk filling up, and the day the box reboots and you discover the cron user's environment differs from your shell's. Fine if you already run a server for other reasons. A poor trade if this job is the only reason it exists.

A scheduled serverless function

No machine to maintain, which removes most of the list above. You still write retries, still handle secrets, still build somewhere to put logs, and you still have to notice when it stops. Good if you are comfortable in that platform's tooling and the job is genuinely bespoke.

GitHub Actions on a schedule

Popular because it is already there. Two caveats people hit: scheduled workflows are queued rather than guaranteed, so "every five minutes" can drift considerably under load, and scheduled workflows on a repository with no recent activity get disabled. It is a CI system being used as a scheduler.

A scheduled automation service

You describe the trigger and the steps; the retries, secret storage, run history and failure alerts come with it. You trade some control for not owning the list. That is the category Zymura is in, and it is worth being direct about the trade: you cannot run arbitrary code on the server, so anything genuinely custom goes through an HTTP call to something you control.

The part everyone underestimates

Not any single item on that list — the fact that the list never shrinks. Six months later the token expires, the API adds a required header, the box needs a kernel patch. The twenty-line script is still twenty lines. The scaffolding around it is what you actually maintain.

Whichever route you choose, the question worth asking early is: when this stops working, how will I find out? Not if — every integration breaks eventually. The failure mode that costs real money is the one where nothing tells you, which is the subject of the flow that ran and did nothing.

If the answer is "I'd notice the message hadn't arrived", you are relying on a human remembering the absence of something. That works for about three weeks.

Flows that run without youScheduled workflow automation on our servers, not in a browser tab. 51 connectors, visual builder, free tier included.

Open the app