Récemment, sur un projet, nous utilisons, afin de séparer les environnements, des conteneurs Docker. Ce projet utilise des crons pour diverses opérations, la question que nous nous posions est comment exécuter des crons dans un conteneur Docker ?
Qu’est ce qu’un cron ?
Un cron est un « programme » ou un script executé automatiquement par un système informatique et selon un planning bien défini.
On peut ainsi exécuter des taches précises à des moments précis. Les crons fonctionnent aussi bien sous Linux, Unix que Windows. Dans le cas de notre article, ici, nous traitons de la partie Linux
On peut par exemple utiliser des crons pour sauvegarder des données, transférer des données, importer des données et bien d’autres possibilités sont offertes par cette fonctionnalité
Crontab à la rescousse
Etant donné qu’ici, il s’agit d’un serveur exécutant des conteneurs, nous pouvons utiliser tout bêtement la crontab et déclarer les exécutions voulues de cette façon :
0 18 * * 1-5 /usr/bin/docker exec XXXX php lechemindemonfichier.php
Ici, pour faire simple, on lance tout simplement un cron normalement et on demande à Docker de lancer dans le conteneur nommé XXXX de lancer la commande précisée, ici, une commande PHP
Attention
Cela fonctionne plutôt bien, dès lors que nous ne mettons pas l’instruction -it demandant à docker de lancer un pseudo terminal et forçant le cron à ne pas s’exécuter correctement
Les symptômes sont simples, on voit le cron se lancer mais rien ne s’exécute à cause de ces arguments dans la commande