GNU/Linux >> Tutoriales Linux >  >> Linux

Cómo ejecutar un trabajo cron dentro de un contenedor docker

Así es como ejecuto uno de mis contenedores cron.

Dockerfile:

FROM alpine:3.3

ADD crontab.txt /crontab.txt
ADD script.sh /script.sh
COPY entry.sh /entry.sh
RUN chmod 755 /script.sh /entry.sh
RUN /usr/bin/crontab /crontab.txt

CMD ["/entry.sh"]

crontab.txt

*/30 * * * * /script.sh >> /var/log/script.log

entrada.sh

#!/bin/sh

# start cron
/usr/sbin/crond -f -l 8

script.sh

#!/bin/sh

# code goes here.
echo "This is a script, run by cron!"

Construye así

docker build -t mycron .

Corre así

docker run -d mycron

Agregue sus propios scripts y edite crontab.txt y simplemente cree la imagen y ejecútela. Dado que se basa en alpine, la imagen es muy pequeña.


crono funciona bien con tiny en Alpine

RUN apk add --no-cache tini

ENTRYPOINT ["/sbin/tini", "--"]
CMD ["/usr/sbin/crond", "-f"]

pero no debe ejecutarse como proceso principal de contenedor (PID 1) debido al problema de recolección de zombis y problemas con el manejo de señales. Consulte este Docker PR y esta publicación de blog para obtener más detalles.


La solución de @ken-cochrane es probablemente la mejor, sin embargo, también hay una forma de hacerlo sin necesidad de crear archivos adicionales.

Para hacerlo sin archivos extra:

El camino a seguir es configurar el cron dentro de su entrypoint.sh archivo.

Dockerfile


...

# Your Dockerfile above


COPY entrypoint.sh /
RUN chmod +x /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]

punto de entrada.sh


echo "* * * * * echo 'I love running my crons'" >> /etc/crontabs/root
crond -l 2 -f > /dev/stdout 2> /dev/stderr &

# You can put the rest of your entrypoint.sh below this line

...


Linux
  1. ¿Cómo ejecutar `fecha` dentro de un trabajo de pestaña cron?

  2. ¿Cómo ejecutar un comando dentro de un contenedor Systemd en ejecución?

  3. ¿Cómo ejecutar un programa dentro de un contenedor Docker?

  4. Cómo ejecutar MySQL en un contenedor Docker

  5. ¿Cómo configurar un trabajo cron para ejecutar un ejecutable cada hora?

Cómo ejecutar la pila ELK en Docker Container

Cómo ejecutar PHPMyAdmin en un contenedor Docker

Cómo ejecutar un comando en un contenedor Docker en ejecución

Cómo ejecutar Grafana en un contenedor Docker

Cómo ejecutar contenedores Docker

¿Cómo puedo hacer que un trabajo cron se ejecute cada 30 minutos?