RHCSAv10 · RHEL 10

Exercises

Exercise: backup script + timer

updated 2026-10-19 by seed

Tasks

  1. Write /usr/local/bin/labackup.sh SOURCE DEST: validate arguments, create DEST, archive SOURCE as a timestamped .tgz, log to /var/log/labackup.log, return an honest exit code.
  2. Test it by hand (success and failure).
  3. Create labackup.service + labackup.timer (OnCalendar=--* 03:00, Persistent=true).
  4. Enable the timer and prove it is scheduled.

Verify

/usr/local/bin/labackup.sh            # non-zero code + usage message
/usr/local/bin/labackup.sh /etc /tmp/bk && ls /tmp/bk
systemctl list-timers labackup.timer --no-pager

Solution

sudo tee /usr/local/bin/labackup.sh >/dev/null <<'EOF'
#!/bin/bash
set -euo pipefail
src="${1:?usage: $0 SOURCE DEST}"
dst="${2:?usage: $0 SOURCE DEST}"
mkdir -p "$dst"
out="$dst/$(basename "$src")-$(date +%F-%H%M).tgz"
tar czf "$out" "$src"
echo "$(date -Is) ok $out" >> /var/log/labackup.log
EOF
sudo chmod 755 /usr/local/bin/labackup.sh && sudo touch /var/log/labackup.log
sudo tee /etc/systemd/system/labackup.service >/dev/null <<'EOF'
[Unit]
Description=Backup lab
[Service]
Type=oneshot
ExecStart=/usr/local/bin/labackup.sh /srv /backup
EOF
sudo tee /etc/systemd/system/labackup.timer >/dev/null <<'EOF'
[Unit]
Description=Backup lab 03:00
[Timer]
OnCalendar=*-*-* 03:00:00
Persistent=true
[Install]
WantedBy=timers.target
EOF
sudo restorecon -v /etc/systemd/system/labackup.*
sudo systemctl daemon-reload && sudo systemctl enable --now labackup.timer