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.
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.