Bot de Telegram

Respaldo periódico con Bot de Telegram y Cron

Acabo de publicar un artículo enseñándote a respaldar un archivo o directorio de manera programada con Telegram. En este artículo te voy a enseñar a respaldar periódicamente un fichero o carpeta en la nube de Telegram.

Enviar respaldo periódico a Telegram usando Bot y Cron – Copia de seguridad

Con el código presentado en este post serás capaz de hacer un backup diario, cada semana, cada inicio de mes, cada hora, cada segundo, todos los viernes, etcétera. Basta con ejecutar el programa una vez y según la configuración se harán respaldos cada tiempo que tú indiques en la nube de Telegram.

Veamos cómo combinar el Cron de Golang con los Bots de Telegram para hacer respaldos en la nube periódicamente.

Respaldando archivo o directorio

En un post anterior te enseñé a respaldar una carpeta o un fichero de cualquier tipo en la nube de Telegram, pero ese respaldo solo se hará una vez cuando ejecutes el programa. Ese post es la base de este, y te recomiendo revisarlo en profundidad en caso de que quieras comprender cómo es que se hace el backup en la nube de  Telegram gracias a los Bots.

Gracias al código presente en ese post puedes enviar un archivo a cualquier usuario, grupo o canal de Telegram saltando el límite de tamaño. Y con lo que veremos a continuación podrás programar respaldos semanales, mensuales, diarios o incluso cada 10 segundos.

También he explicado en el mismo post cómo unir los archivos en caso de que hayan sido divididos.

Respaldo periódico con Cron

Conocí cron o crontab al trabajar con Linux para hacer respaldos periódicos y dejarlos en el propio almacenamiento.

Cron funciona a nivel de sistema operativo para ese caso, pero también existe un paquete en Golang que tiene el mismo funcionamiento sin importar la plataforma, así que con el mismo código fuente puedes respaldar periódicamente y enviarlo a la nube de Telegram desde cualquier sistema operativo incluyendo Windows.

El respaldo normal se hace así:

err := respaldar(*archivoRespaldar, *tokenTelegram, *idChat)
if err != nil {
 err = enviarMensaje(err.Error(), *tokenTelegram, *idChat)
 if err != nil {
  fmt.Printf("Error: %v", err)
 }
}

Ahora simplemente es cuestión de usar el paquete de cron para programar los respaldos automáticos según un intervalo de tiempo:

errorIniciandoCron := miCron.AddFunc(*specParaCron, func() {
 err := respaldar(*archivoRespaldar, *tokenTelegram, *idChat)
 if err != nil {
  err = enviarMensaje(err.Error(), *tokenTelegram, *idChat)
  if err != nil {
   fmt.Printf("Error: %v", err)
  }
 }
})

La diferencia radica en miCron.AddFunc en donde el spec para Cron es una cadena indicando cada cuánto hacer los respaldos. Dicha especificación se describe a continuación:

.--------------- minuto (0-59) 
| .------------ hora (0-23)
| | .--------- día del mes (1-31)
| | | .------ mes (1-12) o jan,feb,mar,apr,may,jun,jul... (meses en inglés)
| | | | .--- día de la semana (0-6) (domingo=0 o 7) o sun,mon,tue,wed,thu,fri,sat (días en inglés) 
| | | | |
* * * * * comando a ejecutar
  • Por ejemplo, si quieres hacer el respaldo diariamente a la medianoche especificarías lo siguiente: 0 0 * * *
  • En caso de que quieras que el respaldo se envíe a la nube de  Telegram a las 5 de la tarde todos los días: 0 17 * * *
  • También se puede hacer un backup semanal (todos los domingos a medianoche) con un Bot de Telegram con la siguiente especificación: 0 0 * * 0

Puedes leer más sobre los valores de cron en la wikipedia, o generar valores entendibles en crontab.guru.

Poniendo todo junto

Te acabo de mostrar el código más importante para poder usar Cron, programar un respaldo periódico y enviarlo a cualquier usuario, grupo o canal de Telegram con un Bot. Te voy a dejar el código completo en GitHub.

Una vez que lo tengas, ejecuta go mod tidy para descargar las dependencias, luego ejecuta go build para compilar el programa y finalmente ejecútalo pasándole tu token de Bot de Telegram, la especificación de Cron, el id del grupo, usuario o canal de Telegram y el nombre del archivo o directorio a respaldar.

C:\Users\parzibyte\Desktop\respaldar-telegram-main>respaldar_archivo_telegram.exe
  -archivo string
        El archivo o directorio a respaldar
  -id_chat string
        El ID del chat al que quieres enviar el archivo
  -spec string
        Especificación para cron
  -token string
        Tu token de Telegram

Por ejemplo, para respaldar el archivo llamado main.go cada 10 segundos:

respaldar_archivo_telegram.exe -archivo main.go -id_chat "aquí va el id del chat" -spec "*/10 * * * * *" -token "aquí va el token"

En el mismo repositorio de GitHub, dentro del apartado Releases vas a encontrar el código fuente ya compilado en caso de que no quieras compilarlo por ti mismo, así solo debes ejecutarlo para programar correctamente la copia de seguridad periódicamente.

Estoy aquí para ayudarte 🤝💻


Estoy aquí para ayudarte en todo lo que necesites. Si requieres alguna modificación en lo presentado en este post, deseas asistencia con tu tarea, proyecto o precisas desarrollar un software a medida, no dudes en contactarme. Estoy comprometido a brindarte el apoyo necesario para que logres tus objetivos. Mi correo es parzibyte(arroba)gmail.com, estoy como@parzibyte en Telegram o en mi página de contacto

No te pierdas ninguno de mis posts 🚀🔔

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.
parzibyte

Programador freelancer listo para trabajar contigo. Aplicaciones web, móviles y de escritorio. PHP, Java, Go, Python, JavaScript, Kotlin y más :) https://parzibyte.me/blog/software-creado-por-parzibyte/

Entradas recientes

Creador de credenciales web – Aplicación gratuita

Hoy te voy a presentar un creador de credenciales que acabo de programar y que…

1 semana hace

Desplegar PWA creada con Vue 3, Vite y SQLite3 en Apache

Ya te enseñé cómo convertir una aplicación web de Vue 3 en una PWA. Al…

2 semanas hace

Arquitectura para wasm con Go, Vue 3, Pinia y Vite

En este artículo voy a documentar la arquitectura que yo utilizo al trabajar con WebAssembly…

2 semanas hace

Vue 3 y Vite: crear PWA (Progressive Web App)

En un artículo anterior te enseñé a crear un PWA. Al final, cualquier aplicación que…

2 semanas hace

Errores de Comlink y algunas soluciones

Al usar Comlink para trabajar con los workers usando JavaScript me han aparecido algunos errores…

2 semanas hace

Esperar promesa para inicializar Store de Pinia con Vue 3

En este artículo te voy a enseñar cómo usar un "top level await" esperando a…

2 semanas hace

Esta web usa cookies.