Let's face it, we've all spent countless hours tweaking crontab files by hand. But if you're craving a more intuitive way to manage your tasks and want a simpler setup that includes built-in backup software, GoCron is definitely worth considering.
What is GoCron?
GoCron is a task scheduler built with Go and Vue.js that allows users to define recurring jobs via a simple YAML configuration file. It supports cron scheduling, environment variables, and easy job management.

GoCron Key Features
The key features of GoCron include:
- Simple Configuration: Define jobs, cron schedules, and environment variables in a YAML config file.
- Cron Scheduling: Supports cron expressions for precise scheduling.
- Environment Variables: Define environment variables specific to each job.
- Easy Job Management: Add and remove jobs quickly with simple configuration.
- Pre-installed Backup Software: GoCron comes equipped with Borg, Restic and Rclone but are not necessary to use the app.
How It Works
GoCron's configuration file is divided into two main sections: Defaults and Jobs. The Defaults section defines default values that are applied to all jobs, including a default cron expression and environment variables. The Jobs section allows users to define multiple jobs, each with its own cron expression, environment variables, and commands to execute. See the example config file here.
Install GoCron using Docker Compose
If you don't have Docker installed and need help getting started, I recommend checking out our self-hosting guides for beginners. These guides cover the basics of setting up Docker on your server. They're designed to help you get up and running smoothly, even if you're new to self-hosting.
services:
gocron:
image: ghcr.io/flohoss/gocron:latest
restart: always
container_name: gocron
hostname: gocron
environment:
- TZ=America/Detroit
# Uncomment and replace <token> if using ntfy notifications
# - NTFY_URL=https://
# - NTFY_TOPIC=cron
# - NTFY_TOKEN=<token>
volumes:
- /docker/gocron/config/:/app/config/
# Uncomment if using Restic with a password file
# - ./.resticpwd:/secrets/.resticpwd
# Uncomment if using a preconfigured rclone config
# - ./.rclone.conf:/root/.config/rclone/rclone.conf
# Uncomment to allow running Docker commands inside the container
- /var/run/docker.sock:/var/run/docker.sock
ports:
- '8156:8156'Change the time zone and volume mounts if needed. This stack will automatically create the config.yml file needed. One thing to note is you can use Ntfy to send notifications when jobs have completed or failed. Just uncomment the environment variables if you want to use it. The token is not needed so don't let that throw you off. You can leave that commented.

Open the config.yml file and you will see a couple example cron jobs. Here you can get an idea for what you need to do to create more jobs.
From the minimal GoCron UI, you can run the jobs manually by pressing the play button at the top. You can also click the job name to see the live log view.

Final Notes and Thoughts
GoCron is a great solution for automating daily backups or scheduling routine system updates. It's simple and does what it should with a single config file.
Check out the GoCron project on Github and give them a star!
Discussion