Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

1K
Vistas
El trabajo cron no se ejecuta automáticamente dentro de un contenedor Docker

Tengo un contenedor LAMP con supervisor.

Agrego un cron simple

 * * * * * root /bin/date >> /var/log/cron.log

de mi Dockerfile

 ADD ./crons/test /etc/cron.d/test RUN chmod 0777 /etc/cron.d/test

Comienzo cron a través de supervisor con un supervisor-cron.conf como este:

 [program:cron] command=/bin/bash -c "cron -f" numprocs=1 autostart=true autorestart=true startretries=2

Cron comienza bien y se mantiene en funcionamiento. Lo extraño es que ningún trabajo cron se ejecuta automáticamente [como debería], pero cuando ejecuto docker exec lamp crontab /etc/cron.d/test , el trabajo cron se inicia y funciona como se esperaba.

¿Me estoy perdiendo de algo? En todas partes he leído que los trabajos cron se ejecutan automáticamente por cron.

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Lo resolví.

Intenté configurarlos en /etc/crontab y /etc/cron.d/ .

Cron no inició automáticamente los trabajos cron.

Sin embargo, cuando ejecuto docker exec lamp crontab /etc/cron.d/my_cronjob_file todo funcionó bien. Esto me hizo sospechar, y luego leí esto . Entonces, después de agregar my_cronjob_file en el contenedor [en el dockerfile], agregué RUN crontab /etc/cron.d/my_cronjob_file . Esto esencialmente 'instala' el cronjob en la tabla crontab. [No conozco el funcionamiento interno de cron/tab, pero eso es lo esencial que entendí.] .

Después de eso, el supervisor activa el servicio cron y el cronjob se ejecuta a la perfección.

over 4 years ago · Santiago Trujillo Denunciar

0

Esto se puede resolver con el archivo bash, debido a la arquitectura en capas de Docker, el servicio cron no se inicia con los comandos RUN/CMD/ENTRYPOINT.

Simplemente agregue un archivo bash que iniciará el cron y otros servicios (si es necesario)

DockerFile

 FROM gradle:6.5.1-jdk11 AS build # apt RUN apt-get update RUN apt-get -y install cron # Setup cron to run every minute to print (you can add/update your cron here) RUN touch /var/log/cron-1.log RUN (crontab -l ; echo "* * * * * echo testing cron.... >> /var/log/cron-1.log 2>&1") | crontab # entrypoint.sh RUN chmod +x entrypoint.sh CMD ["bash","entrypoint.sh"]

punto de entrada.sh

 #!/bin/sh service cron start & tail -f /var/log/cron-2.log

Si también se requiere que otro servicio se ejecute junto con cron, agregue ese servicio con & en el mismo comando, por ejemplo: /opt/wildfly/bin/standalone.sh & service cron start & tail -f /var/log/cron-2.log

Una vez que ingrese al contenedor docker, podrá ver que testing cron.... se imprimirá cada minuto en el archivo: /var/log/cron-1.log

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda