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.
How to do it
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.
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.
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.
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".
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
Related guides
Set a retention policy
Keep N daily, weekly, and monthly snapshots and let the scheduled prune map your policy straight onto restic forget --prune.
Run restore drills
Automatically restore the latest snapshot into a scratch workspace, byte- and row-diff it against the source, and get a pass/fail badge.
PostgreSQL
Back up PostgreSQL in Docker
MySQL
Back up MySQL in Docker
MongoDB
Back up MongoDB in Docker
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.