DEV Community

Alan Patrick
Alan Patrick

Posted on

Create an automatic backup system on Ubuntu with bash, rsync and crontab

There is a lot of cool things you can do with scripts! One thing I always wanted to do is create a backup system that runs automatically at a certain point of the day. Here is how I made the script using rsync and crontab commands.

Step 0: It all starts with a BANG

Create a script named makebackup.sh like this:

#!/bin/bash

echo Initializing backup script.
Enter fullscreen mode Exit fullscreen mode

The #!/bin/bash comment is a directive that announces which interpreter to use. In this case, the interpreter is bash, but could be others, like python or node. This directive is called a shebang.

We need an executable script, which means it needs permission to be executed. To change the permissions of a file, you need the chmod command. This command has two ways of receiving new permission policies: numbers and letters. We will use the letter system, and let all users to be capable of executing the script. (There is a good guide for chmod here).

On the terminal, write:

chmod a+x makebackup.sh
# a means all users
# + means adding a permission (a minus (-) would be removing it).
# x means permission to execute
Enter fullscreen mode Exit fullscreen mode

Step 1: Where will it come from, where will it go

We will be using rsync for copying the items, but you could use other tools, like the cp command. To learn more about rsync, click here.

Within the makebackup.sh script, write the following:

#!/bin/bash
echo Initializing backup script

rsync [Sources] /path/to/[Destination]/
# Sources are all files and folders to back up
# Destination is the folder to store the backups

echo Backup finised. Exiting script.
Enter fullscreen mode Exit fullscreen mode

Keep in mind! The [Destination] folder doesn't need to already be there, because rsync creates it for you, if inexistent. All you need is to name the desired output directory. Do not forget the forward slash at the end, though, to indicate that it is a folder.

Step 2: I got a job for you

Before you set up the cronjob, you have to decide on the schedule. When should things be backed up? Use the Crontab Guru tool for deciding when you want the job done — daily, weekly, monthly, etc.

Then, you set up cronjob, which is really easy! Type crontab -e on the terminal, and it will open a crontab with some nice information — do skim it, at least. Within the file, go to the bottom, paste the schedule you got from Crontab Guru, and type out the full path to your executable script. Something like this:

# Crontab file
00 10 * * * /path/to/makebackup.sh
Enter fullscreen mode Exit fullscreen mode

Step 3: The End

And this is it! Your backup script is automated.

Some warnings and considerations

The cron service takes 1 or 2 minutes to reload, so if you want to test immediately, keep the timing in mind: set the execution of the cronjob for at least 3 minutes from saving the crontab file.

Another thing to keep in mind is this: you could schedule a tar command, instead of creating a custom script. It would look something like this:

# Crontab
# at 10:30 am, everyday, do
30 10 * * * tar cvzf /path/to/archive_name.tar.gz /path/to/input_directory/
Enter fullscreen mode Exit fullscreen mode

Conclusion

I hope this was helpful! The cron service is really powerful, and so is bash scripting. You can create all kinds of scheduled tasks and make your ubuntu machine to be a personal butler! If you have any ideas of what else can be done with cron or suggestions for improving this article, please comment below!

Top comments (0)