GNU/Linux >> Linux Esercitazione >  >> Linux

Come eseguire un cron job all'interno di un contenitore docker

Ecco come eseguo uno dei miei contenitori 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

entry.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!"

Costruisci così

docker build -t mycron .

Corri così

docker run -d mycron

Aggiungi i tuoi script e modifica crontab.txt e costruisci l'immagine ed esegui. Dal momento che è basato su alpine, l'immagine è super piccola.


crond funziona bene con tiny su Alpine

RUN apk add --no-cache tini

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

ma non dovrebbe essere eseguito come processo principale del contenitore (PID 1) a causa di problemi di raccolta di zombi e problemi con la gestione del segnale. Vedi questo Docker PR e questo post sul blog per i dettagli.


La soluzione di @ken-cochrane è probabilmente la migliore, tuttavia esiste anche un modo per farlo senza dover creare file aggiuntivi.

Per farlo senza file aggiuntivi:

La strada da percorrere è impostare il cron all'interno del tuo entrypoint.sh file.

Dockerfile


...

# Your Dockerfile above


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

entrypoint.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. Come eseguire `date` all'interno di un processo Cron Tab?

  2. Come eseguire un comando all'interno di un contenitore Systemd in esecuzione?

  3. Come eseguire un programma all'interno di un contenitore Docker?

  4. Come eseguire MySQL in un contenitore Docker

  5. Come uscire da un container Docker

Come eseguire lo stack ELK su Docker Container

Come eseguire PHPMyAdmin in un contenitore Docker

Come eseguire Grafana in un contenitore Docker

Come eseguire i contenitori Docker

Come posso ottenere un cron job da eseguire ogni 30 minuti?

Come aggiungere utenti al contenitore Docker?