Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

1K
Views
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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!