Get started
Platform guide

Schedule automatic backups

Dockstash schedules four job kinds per project — backup, prune, check, and drill — each on its own cron expression, executed through a serialized queue that guarantees one job per repository at a time. Set a daily backup, a weekly prune with your retention policy, and a weekly drill, and the platform runs and verifies your backups without you.

Step by step

How to do it

  1. Open the project’s Schedule tab

    Go to the project detail screen and open the Schedule tab. Scheduling requires a paid tier: Free runs manual backups only, Pro allows up to hourly schedules, Business allows any cron expression.

  2. Pick the backup frequency

    Choose daily, weekly, or a custom cron expression — cron syntax is validated inline as you type (0 3 * * * = daily at 03:00). Daily at a quiet hour is the right default; go hourly only when losing a day of writes is unacceptable.

  3. Add a prune schedule with retention

    Prune is a separate job kind on purpose — it holds the repository lock and deletes data, so it never runs inline with a backup. Add a weekly prune and set your retention policy (keep N daily / weekly / monthly snapshots); it maps directly to restic forget --prune.

  4. Add integrity checks and a restore drill

    Schedule a check (restic check — structural integrity, cheap, daily is fine) and a drill (full restore into a scratch workspace with byte and row diffs — expensive, weekly is the sweet spot). The drill is what turns "backup exists" into "backup restores".

  5. Save and watch the first scheduled run

    Save the schedule and let it fire. Every running job streams its restic output live into the dashboard log panel. Two schedules that collide on the same repository are serialized automatically — restic corrupts repos under concurrent access, so the queue is the correctness contract, not an optimization.

Do it in one click with Dockstash

Dockstash runs the exact dump above, restics it off-site, and drill-tests the restore automatically — no script to maintain.

Last updated: July 2026

Frequently asked questions

Why can’t prune run as part of the backup job?

Prune holds the repo lock and is destructive. If a combined job failed halfway you could end up with neither a fresh backup nor a completed prune. Separate schedules mean each operation succeeds or fails alone.

What happens when two schedules fire at the same time?

Same repository: they are serialized — the second waits for the first. Different repositories run in parallel. A repo never sees two concurrent restic operations.

What cron frequencies does my plan allow?

Free has no schedules (manual Backup Now only). Pro allows up to hourly. Business allows any cron expression. The schedule form rejects anything above your tier’s ceiling.

Do scheduled runs retry on failure?

Yes, with capped exponential backoff. Repeated failures mark the schedule failed and fire an alert email — failures are loud by design.

Can I watch a scheduled backup while it runs?

Yes. Every job streams restic stdout/stderr line by line to the project’s log panel over a live socket, exactly like a manual Backup Now.