GNU/Linux >> Tutoriels Linux >  >> Linux

Comment exécuter une tâche cron dans un conteneur docker

Voici comment j'exécute l'un de mes conteneurs cron.

Fichier Docker :

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

Construire comme ça

docker build -t mycron .

Courez comme ça

docker run -d mycron

Ajoutez vos propres scripts et modifiez le crontab.txt, créez simplement l'image et exécutez-la. Puisqu'elle est basée sur alpine, l'image est super petite.


crond fonctionne bien avec Tiny sur Alpine

RUN apk add --no-cache tini

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

mais ne doit pas être exécuté en tant que processus principal du conteneur (PID 1) en raison d'un problème de récolte de zombies et de problèmes de traitement du signal. Voir ce Docker PR et cet article de blog pour plus de détails.


La solution de @ken-cochrane est probablement la meilleure, cependant, il existe également un moyen de le faire sans avoir besoin de créer des fichiers supplémentaires.

Pour le faire sans fichiers supplémentaires :

La solution consiste à définir le cron dans votre entrypoint.sh fichier.

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. Comment exécuter `date` à l'intérieur d'un travail d'onglet Cron ?

  2. Comment quitter un conteneur Docker

  3. Docker peut-il s'exécuter dans un conteneur Linux ?

  4. Comment envoyer un signal au programme exécuté dans un conteneur Docker ?

  5. Comment ajouter des utilisateurs au conteneur Docker ?

Comment exécuter la pile ELK sur Docker Container

Comment exécuter un programme dans un conteneur Docker ?

Comment exécuter PHPMyAdmin dans un conteneur Docker

Comment exécuter Grafana dans un conteneur Docker

Comment exécuter des conteneurs Docker

Comment puis-je exécuter une tâche cron toutes les 30 minutes ?