Tasks
- 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. - Test it by hand (success and failure).
- Create
labackup.service + labackup.timer (OnCalendar=--* 03:00, Persistent=true). - 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