Servei de Còpia de Seguretat Automàtica amb systemd
Objectius
- Aprendre a crear un servei bàsic amb
systemd
. - Configurar un servei que s’executi a l’inici del sistema.
- Entendre els fitxers d’unitat de
systemd
i com gestionar-los. - Crear un script senzill per realitzar una còpia de seguretat de la carpeta
/home
i desar-lo a/backup
.
Requeriments Previs
- Tenir una màquina virtual (MV) amb Debian instal·lat.
- Totes les comandes s’han d’executar amb permisos de superusuari (
root
). Per tant,su -
. - Realitzar un
apt update -y && apt upgrade -y
per assegurar-se que el sistema està actualitzat. - Instal·lar el paquet
vim
per editar fitxers:apt install vim -y
. - Crear la carpeta
/backup
on es desaran les còpies de seguretat:mkdir -p /backup
.
Servei bàsic amb systemd
Crearem un script que farà la còpia de seguretat de la carpeta
/home
, per fer-ho simplement crearem un arxiu.tar.gz
amb la data i hora actual al nom de l’arxiu. Aquest arxiu es desarà a la carpeta/backup
que hem creat anteriorment. El script es col·locarà a/usr/local/bin/backup.sh
.#!/bin/bash tar -czf /backup/system_backup_$(date +%Y%m%d_%H%M%S).tar.gz /home
Configurarem un servei que faci una còpia de seguretat cada cop que s’iniciï el sistema. Crearem un fitxer de servei a
/etc/systemd/system/backup.service
.[Unit] Description=Backup Service After=network.target [Service] Type=oneshot ExecStart=/usr/local/bin/backup.sh [Install] WantedBy=multi-user.target
El target multi-user.target
s’utilitza perquè el servei s’executi quan el sistema està en mode multiusuari, és a dir, quan la majoria dels serveis del sistema ja estan en funcionament.
Activarem el servei perquè s’executi a l’inici del sistema amb la comanda:
systemctl start backup.service
Comprova l’estat del servei amb:
systemctl status backup.service
El servei no s’ha arrancat degut a errors en l’script. Revisa el fitxer de registre amb journalctl -xeu backup.service
per veure els errors i corregir-los. On xeu
indica que volem veure els missatges d’error i advertència filtrant per unitat. El error que observareu és que el script no té permisos d’execució. Per solucionar-ho, simplement afegiu permisos d’execució a l’script amb chmod +x /usr/local/bin/backup.sh
i torneu a iniciar el servei amb systemctl restart backup.service
.
Comprovarem el contigut de la carpeta
/backup
. Un cop el servei s’hagi executat correctament, hauríeu de veure un fitxer de còpia de seguretat amb la data actual al nom del fitxer.ls -lh /backup
Activarem el servei perquè s’executi a l’inici del sistema amb la comanda:
systemctl enable backup.service
Finalment, reiniciarem el sistema per assegurar-nos que el servei s’executa correctament a l’inici:
reboot
Després de reiniciar, comprova que el fitxer de còpia de seguretat s’ha creat correctament a la carpeta
/backup
:ls -lh /backup
Servei amb Timer amb systemd
El servei que hem creat anteriorment s’executa només una vegada a l’inici del sistema. Ara crearem un servei que s’executi diàriament a una hora específica utilitzant un timer de systemd
. El primer pas és crear el servei que volem executar periòdicament, en aquest cas, el mateix script de còpia de seguretat que hem creat abans. El segon pas és crear un fitxer de timer que programi l’execució del servei.
Crearem un fitxer de timer a
/etc/systemd/system/backup-daily.timer
per programar l’execució del servei diàriament a les 2:00 AM.[Unit] Description=Runs backup-daily.service daily at 2:00 AM Requires=backup-daily.service [Timer] OnCalendar=*-*-* 02:00:00 Persistent=true [Install] WantedBy=timers.target
on el camp
OnCalendar
,*-*-* 02:00:00
indica que el servei s’executarà diàriament a les 2:00 AM. La líniaPersistent=true
assegura que si el sistema està apagat a l’hora programada, el servei s’executarà tan aviat com el sistema s’iniciï. El*-*-*
és un comodí que representa qualsevol any, mes i dia.Crearem el fitxer de servei a
/etc/systemd/system/backup-daily.service
que serà el que s’executarà diàriament.[Unit] Description=Daily Backup Service [Service] Type=oneshot ExecStart=/usr/local/bin/backup.sh
Activarem el timer perquè s’executi diàriament amb la comanda:
systemctl enable --now backup-daily.timer
L’argument --now
activa el timer immediatament després d’habilitar-lo, de manera que no cal reiniciar el sistema per començar a utilitzar-lo.
Comprova l’estat del timer amb:
systemctl status backup-daily.timer
Per veure quan s’executarà el proper cop el servei, utilitza la comanda:
systemctl list-timers --all
Per provar que el servei funciona correctament, pots forçar l’execució del servei amb la comanda:
systemctl start backup-daily.service
Exercicis Proposats
Modifica el servei perquè faci una còpia de seguretat de la carpeta
/var
i/etc
en lloc de/home
. Un cop fet això, utilitzasystemd-analyze
isystemd-analyze blame
per analitzar el servei abans i després d’activar-lo. Comenta i justifica els resultats obtinguts.Crea un servei que permeti actualitzar el sistema automàticament cada diumenge a les 3:00 AM. Aquest servei hauria d’executar
apt update && apt upgrade -y
.