Skip to content

Instantly share code, notes, and snippets.

@Madh93
Last active February 15, 2017 16:59
Show Gist options
  • Save Madh93/c0d67765fb91750e448d94de7e30cdfc to your computer and use it in GitHub Desktop.
Save Madh93/c0d67765fb91750e448d94de7e30cdfc to your computer and use it in GitHub Desktop.
Backup: Personal system backup using systemd.

Backup

Personal system backup using systemd.

Installation

  • Copy backup.sh in /usr/local/bin/backup (checkout /usr/local/bin is in $PATH)
  • Copy backup.service in /etc/systemd/system/backup.service
  • Copy backup.timer in /etc/systemd/system/backup.timer

Usage

Edit script settings (backup directory, directories to exclude, etc.) and timer (by default: every day at 03:00 o'clock).

Activate:

systemctl enable backup.timer
systemctl start backup.timer
# http://patrakov.blogspot.com.es/2011/01/writing-systemd-service-files.html
[Unit]
Description=Personal System Backup
[Service]
Type=simple
PIDFile=/var/run/backup.pid
ExecStartPre=/bin/rm -f /var/run/backup.pid
ExecStart=/usr/local/bin/backup
[Install]
WantedBy=multi-user.target
#! /bin/bash
# Configuration
user="youruser"
backupdir="/home/$user/.backups"
target="/"
backup="$backupdir/$(uname -n)_$(date +%s)_$(date +"%d-%m-%Y")"
echo "Backup target: $target"
echo "Backup destination: $backup.tar.gz"
# Copy data
start=`date +%s`
echo "Copying files..."
rsync -aAX --info=progress2 --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found","/home/*","/mydata/*"} $target $backup >/dev/null 2>&1
echo "Files copied!"
# Compress data
echo "Compressing files..."
tar -zcvf $backup.tar.gz -C $backup . >/dev/null 2>&1
chown $user $backup.tar.gz
echo "Files compressed!"
# Delete temporal data
echo "Removing temporal files..."
rm -rf $backup >/dev/null 2>&1
echo "Temporal files removed!"
# Delete oldest backup (FIFO: 7 backups)
if [ $(find $backupdir/ | wc -l) -gt 8 ]; then
echo "Removing old backup: $(find $backupdir/ | grep tar.gz | sort | head -1)"
rm $(find $backupdir/ | grep tar.gz | sort | head -1) >/dev/null 2>&1
echo "Old backup removed!"
fi
# Time result
end=`date +%s`
runtime=$((end-start))
((sec=runtime%60, runtime/=60, min=runtime%60, hrs=runtime/60))
timestamp=$(printf "%d:%02d:%02d" $hrs $min $sec)
echo "System backup done in $timestamp"
# Poweroff (optional)
# [ -n "$(uptime -p | grep hour)" ] || poweroff
# https://www.certdepot.net/rhel7-use-systemd-timers/
[Unit]
Description=Execute backup every day at 03:00 o'clock
[Timer]
OnCalendar=*-*-* 03:00:00
Unit=backup.service
[Install]
WantedBy=multi-user.target
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment