restic backups scheduled with native OS tools

4 minute read

Remote Backups - Just Do It

I wanted to share here a project that I did a few years ago but that is still very relevant. What is very relevant? To have off-site client-side encrypted remote backups of course! In the past I used CrashPlan but at some point the switched business model and got rid of the affordable personal plans. As of this I was reviewing the market with some of my requirements being:

  • Client-side encrypted
  • Headless, should be possible to run on a server i.e. CLI
  • Cross-platform
  • Preferably using open source tools
  • Being able to restore to different older revision
  • Retention policy configuration to not explode in storage costs
  • Bonus: flexibility in storage backend

It did not take long time until I came across restic A remote backup CLI program that excels in effectiveness, security, flexibility and portability.
. After playing around for a bit I quickly settled that this tool will be able to do what I want. I also come across Backblaze B2 as a cheap and reliable storage backend that works well with restic.

Problem solved? Not quite.

Automating Backups

There is not built-in scheduler for restic. It’s just a cli tool that you can run like $ restic backup. I started with exploring the simplest solution which on Unix systems will be to use a cron job A Unix tool (standard) for scheduling background jobs.
. While this works, it does not give you the fullest potential if you happen to be running on a system that uses systemd (like mine, Arch Linux). Some benefits would be better access to logging and being able to define dependencies, access control etc.

As I could not find any ready solutions for this on the Internet, I took this as an opportunity to learn more about systemd services and timers. I got it to work very nicely meeting all my initial requirements and the monthly bill is rather low! I shared the results of how I set this up as a template-tutorial on my GitHub. Check it out here:

Dynamic GitHub repo image with stats

I’ve continued to use this setup for several years and it works for me perfectly!

Recently I have worked on this project to include setup for macOS and Windows as wel. For both I use the modern native task scheduler LaunchAgents and ScheduledTask respectivly.

Feel free to contribute like many has already done, directly at the GitHub page with issues or Pull Requests!


Leave a comment

Your email address will not be published. Required fields are marked *