Je cette Dockerfile
(où je me sers juste miniconda
parce que je voudrais programmer des scripts python, mais il est une image debian:jessie
docker):tâche cron dans le récipient docker ne pas être exécuté
FROM continuumio/miniconda:4.2.12
RUN mkdir -p /workspace
WORKDIR /workspace
ADD volume .
RUN apt-get update
RUN apt-get install -y cron
ENTRYPOINT ["/bin/sh", "/workspace/conf/entrypoint.sh"]
Le script entrypoint.sh
qui maintient le récipient en vie est celui-ci:
#!/usr/bin/env bash
echo ">>> Configuring cron"
service cron start
touch /var/log/cron.log
mv /workspace/conf/root /var/spool/cron/crontabs/root
chmod +x /var/spool/cron/crontabs/root
crontab /var/spool/cron/crontabs/root
echo ">>> Done!"
tail -f /var/log/cron.log
de la documentation docker au sujet supervisor
(https://docs.docker.com/engine/admin/using_supervisord/) il semble que cela pourrait être une option, ainsi que le script bash option (comme dans mon exemple), c'est pourquoi j'ai décidé d'opter pour le script bash et d'ignorer le superviseur.
Et le contenu des détails Cron /workspace/conf/root
est ceci:
* * * * * root echo "Hello world: $(date +%H:%M:%S)" >> /var/log/cron.log 2>&1
(avec au fond comme une ligne vide \n
)
Je ne peux pas trouver un moyen de voir que Hello world: $(date +%H:%M:%S)
chaque minute ajoutée à /var/log/cron.log
, mais pour moi tous les paramètres cron
/crontab
sont corrects.
Quand je vérifie les journaux du conteneur je peux voir:
>>> Configuring cron
[ ok ] Starting periodic command scheduler: cron.
>>> Done!
En outre, lors de la connexion dans le conteneur en cours d'exécution, je peux voir le fonctionnement du démon cron
:
[email protected]:/workspace# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 4336 1580 ? Ss+ 13:06 0:00 /bin/sh /workspace/conf/entrypoint.sh
root 14 0.0 0.0 27592 2096 ? Ss 13:06 0:00 /usr/sbin/cron
root 36 0.0 0.0 5956 740 ? S+ 13:06 0:00 tail -f /var/log/cron.log
root 108 0.5 0.1 21948 3692 ? Ss 13:14 0:00 bash
root 114 0.0 0.1 19188 2416 ? R+ 13:14 0:00 ps aux
Qu'est-ce que je fais faux? Êtes-vous sûr que Cronjob a des droits d'exécution?
Docker est un «processus sur les stéroïdes». Comme dans: un seul processus. Pas une machine virtuelle. Vous ne pouvez pas supposer que 'init' ou' systemd' est exécuté pour que vous puissiez simplement passer la tâche du démon 'cron'. –
Duplication possible de [Docker: Cronjob ne fonctionne pas] (http://stackoverflow.com/questions/24943982/docker-cronjob-is-not-working) –
De la documentation docker sur 'supervor', il semble que cela pourrait être une option ainsi que l'option de script 'bash' (comme dans mon exemple), c'est pourquoi j'ai décidé d'opter pour le script bash et d'ignorer' supervisor'. Je ne suis pas sûr d'avoir compris pourquoi ce script bash est faux. J'ai également essayé de remplacer dans ce script bash la ligne 'service cron start' avec la ligne' cron' sans succès. – TPPZ