2017-04-03 4 views
0

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?

+0

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'. –

+0

Duplication possible de [Docker: Cronjob ne fonctionne pas] (http://stackoverflow.com/questions/24943982/docker-cronjob-is-not-working) –

+0

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

Répondre

0

chmod 0644 /var/spool/cron/crontabs/root