
678 - Automatización en Linux fácil con GoCron
#GoCron es un fantástico servicio que te permite programar de forma sencilla y visual todo tipo de tareas en #linux y de forma remota
Una de las tareas que más me apasiona, es sin lugar a dudas automatizar. Además, te digo que disfruto automatizando cualquier cosa que se me ponga por delante. Pero, si además, tengo la posibilidad de automatizar tareas repetitivas y tediosas, esto ya es lo mas para mi. Así, últimamente me he propuesto no retrasar bajo ningún concepto todas las tareas referidas a automatizar procesos repetitivos, con el objetivo de conseguir mayor calidad de los mismos, y mayor aseguramiento a la hora de realizarlos. Esta es la razón, por la que cuando encuentro un servicio para automatizar y programar tareas me emociono por encima de mis posibilidades. Así, cuando, hace relativamente poco, me encontré con GoCron, me decidí a probarlo, y al ver lo, relativamente sencillo, que es de instalar y manejar, me decidí a compartirlo para no ser el único en disfrutarlo. Así, en este episodio, te traigo GoCron una herramienta sencilla, pero fiable con la que automatízar en Linux.

Automatización en Linux con GoCron
Un paseo por el pasado
GoCron, no es el primer servicio auto alojado del que te hablo para programar tareas. En concreto, en el episodio 489, titulado Semaphore, ansible y hardening, te hablé de Semaphore. Que es, ni mas ni menos que una herramienta que te permite programar y ejecutar tus Jobs de ansible. Y lo cierto es que comparado con otras herramientas con las que trabajo habitualmente, esta, es realmente muy sencilla. Sin embargo, tiene un pequeño inconveniente, y es que necesitas conocer ansible, y como ya te puedes imaginar esto ya representa un reto importante.
Sin embargo, tengo que decir, que si bien, necesitas aprender ansible para poder utilizar Semaphore, lo cierto es que se trata de una herramienta que vale muy mucho, la pena. Y digo que vale la pena, en el sentido de que tiene un muy gran potencial, y te va a permitir realizar tareas complejas de forma mas o menos sencilla.
Pero, no todos están dispuestos a invertir su tiempo en aprender ansible, lo que no quita que quieran también deshacerse de las tareas tediosas y repetitivas. Y ¿Como conseguir automatizar sin utilizar Ansible?. Pues justo aquí es donde entra GoCron.
¿Que es GoCron?
Pues como te puedes imaginar, GoCron es un programador de tareas construido con Go y Vue.js que permite a los usuarios especificar trabajos recurrentes mediante un sencillo archivo de configuración YAML. El programador lee las definiciones de los trabajos, ejecuta comandos en los tiempos especificados utilizando expresionekks cron y pasa variables de entorno para cada trabajo.
Esto de la configuración YAML, tiene sus ventajas e inconvenientes. Para mi la gran ventaja es que es muy sencillo de poner en marcha, y el gran inconveniente es que para añadir, modificar y eliminar cualquier job, necesitarás reiniciar el servicio, y esto, como te imaginas no mola tanto. Si, como lo estás leyendo.
La cuestión es que en condiciones normales, es decir, cuando tengas tus jobs maduros, no necesitarás reiniciar este archivo de configuración. Sin embargo, y sobre todo al principio, vas a necesitar hacer pruebas y modificaciones hasta que todo funcione como esperas. Y es justo en este caso donde puede ser que te desesperes, iniciando y reiniciando el contenedor.
Características
Algunas de las características realmente interesantes de GoCron, son las siguientes,
- Configuración sencilla: Define fácilmente trabajos, horarios cron y variables de entorno en un archivo de configuración YAML.
- Programación con cron: Soporta expresiones cron para una programación precisa.
- Variables de entorno: Permite definir variables de entorno específicas para cada trabajo.
- Gestión fácil de trabajos: Agrega y elimina trabajos rápidamente con una configuración simple.
- Software de copias de seguridad preinstalado: Ofrece una solución de backup fácil de usar.
Y además tiene API, que puedes probar y utilizar directamente desde la propia página, lo cual es una interesante ventaja. Aunque desde luego, es una opción.
Como funciona
El funcionamiento es realmente sencillo, y por darte algunas pinceladas,
- Sección de valores predeterminados: Define valores predeterminados aplicados a todos los trabajos. Puedes especificar una expresión cron por defecto y variables de entorno que serán heredadas por cada trabajo.
- Sección de trabajos: Aquí se definen múltiples trabajos. Cada uno puede tener su propia expresión cron, variables de entorno y comandos a ejecutar.
- Variables de entorno: Permiten personalizar el entorno de ejecución de cada trabajo.
- Comandos: Cada trabajo puede incluir múltiples comandos, que se ejecutarán en secuencia.
Instalación
Para instalarlo lo mejor es recurrir a un ˋdocker-compose.ymlˋ como el que te muestro a continuación, que es muy similar al que estoy utilizando yo,
services:
gocron:
image: ghcr.io/flohoss/gocron:latest
restart: always
container_name: gocron
hostname: gocron
init: true
environment:
- TZ=Europe/Madrid
volumes:
- ./config/:/app/config/
- /var/run/docker.sock:/var/run/docker.sock
networks:
- proxy
labels:
- traefik.enable=true
- traefik.http.services.gocron.loadbalancer.server.port=8156
- traefik.http.routers.gocron.entrypoints=https
- traefik.http.routers.gocron.rule=Host(`gocron.tuservidor.es`)
- traefik.http.routers.gocron.middlewares=tinyauth@docker
networks:
proxy:
external: true
Si te fijas, de nuevo, y como es habitual, lo he montado utilizando Traefik, como proxy inverso, de forma que lo puedo tener funcionando en paralelo con los otros muchos servicios que están en el mismo servidor.
Y otro detalle interesante es ˋtinyauth@dockerˋ y es que este servicio tampoco tiene un sistema de autenticación. Si lo tienes en casa accedes a el desde la red local o a través de una VPN no hay problema. La cuestión es que en mi caso lo tengo expuesto a internet, y eso son palabras mayores.
Casos de uso
- Automatizar copias de seguridad con
restic
. Esta es precisamente la razón del episodio del lunes - Ejecutar scripts de mantenimiento en servidores
- Monitorizar servicios y reiniciarlos si fallan
- Programar tareas periódicas sin necesidad de
cron
tradicional
Conclusión
GoCron
es una excelente opción para quienes buscan un gestor de tareas con interfaz web y API REST, sin depender de herramientas más complejas como cron
o systemd timers
. Es ligero, fácil de usar y perfecto para automatizar tareas en servidores o entornos autoalojados.