Ejecutar un Cronjob dentro de Docker una guía para principiantes

Ejecutar un Cronjob dentro de Docker una guía para principiantes

Cuando se trata de programas y programas que se ejecutan automáticamente a intervalos establecidos o pueden ser activados por otro evento, tiene muchas opciones. Puede usar una utilidad de uso general como Cron, el programador incorporado en MacOS o Linux, o una herramienta especializada como AWS Lambda. Cron, aunque no tan poderoso como AWS Lambda, es una opción sólida si está utilizando contenedores porque está diseñado para manejar tareas de fondo en sistemas UNIX. Con Docker, sin embargo, las cosas se vuelven un poco más complicadas porque no puedes simplemente lanzar una nueva instancia de Cron desde tu terminal y esperar que funcione.

Cómo dockerizar un trabajo cron

Para ejecutar un trabajo cron dentro de un contenedor Docker, deberá usar el servicio cron y ejecutarlo en primer plano en su contenedor Docker.

Aquí hay un ejemplo de cómo puede configurar esto:

  1. Crear archivo cron:
  2. Cree un archivo que contenga todos los trabajos cron que se ejecutarán en el contenedor Docker. Por ejemplo, llamemos a este archivo 'Cron'.

    cron de gato  

    Nuestro archivo de ejemplo parece:

    Cron * * * * * * echo "La fecha actual es 'fecha'">/var/log/cron 

    Agregue todos los trabajos de Crontab en el archivo anterior que debe ejecutarse en el contenedor Docker.

  3. Crear Dockerfile
  4. A continuación, crea un 'Dockerfile' que instala el servicio cron y copia el script en el contenedor. Aquí hemos proporcionado 3 ejemplos de Dockerfile utilizando el sistema operativo diferente-2. El Alpine Linux es muy liviano y es suficiente para ejecutar Cronjobs. Pero si necesita configurar otros entornos Linux Ubuntu, Apache y PHP. Elija cualquiera de las plantillas de Dockerfile a continuación en función de sus requisitos.

    • Dockerfile con Alpine Linux
    • De Alpine: 3 # Copie el archivo cron al contenedor Copie cron /etc /cron.D/Cron # Dé la carrera de permiso Chmod 0644/etc/cron.D/Cron # Agregue el crono de trabajo cronta crontab/etc/cron.d/cron # enlace el archivo de registro cron cron a stdout ejecutar ln -s/dev/stdout/var/log/cron # Ejecute el servicio cron en el primer plano CMD ["crond", "-l", "2", "-f "]
      12345678910111213141516De Alpine: 3 # Copie el archivo cron al contenedorcopy cron /etc /cron.d/cron # dar el permissrun chmod 0644/etc/cron.d/cron # Agregue el cron jobrun crontab/etc/cron.d/cron # enlace el archivo de registro cron cron a stdoutrun ln -s/dev/stdout/var/log/cron # Ejecute el servicio cron en primer plano ["crond", "-l", "2", "-f"]

    • Dockerfile con Apache y PHP
    • De PHP: 8.0 -apache # instalar cron ejecutar apt update && \ apt -y install cron # copiar el archivo cron al contenedor copiar cron /etc /cron.D/Cron # Dé la carrera de permiso Chmod 0644/etc/cron.D/Cron # Agregue el crono de trabajo cronta crontab/etc/cron.d/cron # enlace el archivo de registro cron cron a stdout ejecutar ln -s/dev/stdout/var/log/cron # start cron service run sed -i 's/^ejecut/servicio cron start \ n \ nexec/'/usr/ Local/bin/apache2-forurg
      1234567891011121314151617181920De PHP: 8.0 -apache # Instale Cronrun Apt Update && \ apt -y install cron # Copie el archivo cron en el contenedorcopy cron /etc /cron.d/cron # dar el permissrun chmod 0644/etc/cron.d/cron # Agregue el cron jobrun crontab/etc/cron.d/cron # enlace el archivo de registro Cron CRON a stdoutrun ln -s/dev/stdout/var/log/cron # start cron servicerun sed -i 's/^ejecut/service cron start \ n \ nexec/'/usr/local/ bin/apache2-forurgue

    • Dockerfile con Ubuntu Linux
    • Desde Ubuntu: último # instalar cron Deamon ejecutar apt update && apt install -y cron # Copie el archivo cron en el contenedor copiar cron /etc /cron.D/Cron # Dé la carrera de permiso Chmod 0644/etc/cron.D/Cron # Agregue el crono de trabajo cronta crontab/etc/cron.d/cron # enlace el archivo de registro cron a stdout ejecutar ln -s/dev/stdout/var/log/cron # Ejecute el servicio cron en el primer plano CMD ["cron", "-f"]]
      12345678910111213141516171819Desde Ubuntu: último # instalar cron Deamonrun Apt Update && apt Install -y Cron # Copie el archivo cron al contenidocopy cron /etc /cron.D/Cron # Dé la carrera de permiso Chmod 0644/etc/cron.d/cron # Agregue el cron jobrun crontab/etc/cron.d/cron # enlace el archivo de registro cron cron a stdouTrun ln -s/dev/stdout/var/log/cron # Ejecute el servicio cron en primer plano -cmd ["cron", "-f"]

  5. Controlante de construcción y ejecución
  6. Tiene dos archivos en su directorio actual. Uno es 'Cron' que contiene los Cronjobs y el segundo es Dockerfile que tiene las instrucciones de compilación para Docker. Ejecute el siguiente comando para construir la imagen Docker usando DockerFile:

    Docker Build -t my_cron .  

    Una vez que la imagen se construye correctamente, puede iniciar un contenedor utilizando la imagen:

    Docker Run -d my_cron  

    Esto iniciará el Daemon Cron debajo del contenedor, que tendrán todos los trabajos programados definidos en 'Cron' archivo.

  7. Configuración de prueba
  8. Los cronjobs deben configurarse con éxito con los contenedores Docker. Como hemos vinculado el archivo de registro cron (/var/log/cron) a/stdout. Mostrar todos los registros generados por el servicio cron puede ser semilla en 'Registros de Docker' dominio.

    Primero, busque la identificación o nombre del contenedor usando 'Docker PS' dominio.

    Docker PS  

    Luego verifique los archivos de registro del contenedor Docker.

    Docker Logs Container_id 

    En el Cronjobs, imprimí la fecha actual y los escribí en registros. Puede ver la imagen a continuación que muestra la fecha actual en registros cada minuto.

    Correr cronjobs en Docker

    Significa que los trabajos cron se ejecutan correctamente debajo del contenedor Docker.

Terminando

Los trabajos de Cron son una forma útil de automatizar las tareas diarias en su computadora, como hacer una copia de seguridad de los archivos. Sin embargo, con Docker, las cosas se vuelven un poco más complicadas porque no puedes simplemente lanzar una nueva instancia de Cron desde tu terminal y esperar que se ejecute. Al ejecutar un trabajo cron en un contenedor Docker, se encontrará con algunos desafíos dependiendo de cómo y dónde desee ejecutar el contenedor. El intervalo de trabajo cron se especifica en segundos y puede variar de un minuto a poco más de 100 años. La frecuencia de trabajo del cron se especifica en términos de la cantidad de veces que el trabajo cron debe ejecutarse todos los días.

Cuando se trata de programas y programas que se ejecutan automáticamente a intervalos establecidos o pueden ser activados por otro evento, tiene muchas opciones. Puede usar una utilidad de uso general como Cron, el programador incorporado en MacOS o Linux, o una herramienta especializada como AWS Lambda. Cron, aunque no tan poderoso como AWS Lambda, es una opción sólida si está utilizando contenedores porque está diseñado para manejar tareas de fondo en sistemas UNIX. Con Docker, sin embargo, las cosas se vuelven un poco más complicadas porque no puedes simplemente lanzar una nueva instancia de Cron desde tu terminal y esperar que funcione.