Blog del Podcast
podcast      GitHub      Mastodon   Telegram

Sincronización Automática con Rsync al Inicio del Sistema

Lectura: 4 min. 771 palabras. rsync

Llevo años peleándome con las copias de seguridad locales y las sincronizaciones en mis equipos. Seguro que quieres que ciertos directorios se sincronicen nada más encender el equipo.

Muchos recurren por inercia a crontab con la directiva @reboot, pero si tu script depende de la red o de un disco externo, falla el 90% de las veces. Hoy te explico cómo montar una sincronización automática con rsync usando systemd para que sea robusta, ligera y se ejecute solo cuando el sistema esté realmente listo.


Guía para configurar la ejecución automática del script de sincronización rsync_arranque.sh durante el arranque del sistema mediante systemd.


¿Por qué systemd y no crontab?

El problema de @reboot en crontab es que es "ciego". El script requiere conectividad de red local y acceso SSH. Si se utiliza @reboot, el script intentará ejecutarse antes de que la interfaz de red haya obtenido una dirección IP (vía DHCP) o antes de que el disco esté montado, provocando un fallo silencioso o un error de conexión, no sincronizando los directorios.

systemd, en cambio, permite definir dependencias explícitas para esperar a que la red esté completamente disponible antes de lanzar la sincronización. Cero dolores de cabeza, cero scripts con sleep 30 al principio para "darle tiempo a la red".


Requisitos previos


Guía de instalación paso a paso

Paso 1: Conceder permisos de ejecución al script

Asegúrate de que el script tenga permisos de ejecución asignados:

chmod +x /nube/scripts/rsync_arranque/rsync_arranque.sh

Paso 2: Crear el servicio de systemd

Vamos a crear el archivo de unidad (unit file) que le dirá a systemd cómo y cuándo ejecutar nuestro script. Abre tu editor favorito (yo siempre tiro de nano o vim) con permisos de superusuario:

sudo nano /etc/systemd/system/rsync-arranque.service

Pega la siguiente configuración. Ojo: recuerda cambiar tu_usuario por el nombre de tu usuario real en el sistema.

[Unit]
Description=Sincronizacion Rsync al arranque
After=network-online.target
Wants=network-online.target


[Service]
Type=oneshot
ExecStart=/nube/scripts/rsync_arranque/rsync_arranque.sh
User=tu_usuario
StandardOutput=journal
StandardError=journal


[Install]
WantedBy=multi-user.target

Paso 3: Recargar, habilitar y probar

Una vez guardado el archivo, aplicamos los cambios en el gestor de inicio, lo habilitamos para que arranque siempre y lo lanzamos manualmente una vez para comprobar que no hay errores de sintaxis en nuestro script:

# Recargar los demonios de systemd
sudo systemctl daemon-reload


# Habilitar el servicio para el arranque
sudo systemctl enable rsync-arranque.service


# Ejecutarlo ahora mismo para probar (sin necesidad de reiniciar)
sudo systemctl start rsync-arranque.service

Si quieres verificar que todo ha ido como la seda, revisa los logs con:

journalctl -u rsync-arranque.service -e

Explicación concisa de la configuración

No vamos a extendernos en teoría innecesaria, pero es vital que entiendas estas cuatro líneas para que puedas adaptarlas a futuros proyectos:


Conclusión y opinión personal

Llevo usando esta configuración en mi servidor de backups y la fiabilidad es del 100%. El consumo de recursos en reposo es literalmente nulo (al ser un servicio oneshot, no consume RAM una vez termina la sincronización) y te ahorra tener que instalar herramientas de terceros pesadas o agentes de sincronización en la nube como puede ser syncthing, etc... que escanean tus archivos.

Es una solución nativa, ligera, automatizable y que respeta al máximo la filosofía de "hazlo una vez, en texto plano, y olvídame". Si buscas independencia digital y control total sobre tus datos, integrar tus scripts de bash con systemd es un paso obligatorio.






Comentarios en Mastodon


Publicado el sábado, 26 de septiembre de 2026




Powered by wdblog

Licencia de Creative Commons
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 4.0 Internacional.