2015-05-23 14 views
7

Bu sorun için searching iken, cron -f hizmeti başlatmalıyım. Dockerfile'da cron hizmeti neden çalışmıyor?

Yani var:
RUN apt-get install -qq -y git cron

Sonraki Ben:
CMD cron -f && crontab -l > pullCron && echo "* * * * * git -C ${HOMEDIR} pull" >> pullCron && crontab pullCron && rm pullCron

Benim dockerfile hatasız dağıtır ama cron çalışmaz. Eklenmiş bir hat ile cron servisini başlatmak için ne yapabilirim?

PS:
benim cron git fonksiyonu aslında bir kanca olması gerektiğini biliyorum ama bana (ve muhtemelen diğerleri için) için bu Docker ile crons nasıl ayarlanacağını öğrenmek üzeredir :-)

PPS :
Komple Dockerfile (GÜNCELLENDİ):

RUN apt-get update && apt-get upgrade -y 
RUN mkdir -p /var/log/supervisor 
RUN apt-get install -qq -y nginx git supervisor cron wget 
RUN echo "daemon off;" >> /etc/nginx/nginx.conf 
RUN wget -O ./supervisord.conf https://raw.githubusercontent.com/..../supervisord.conf 
RUN mv ./supervisord.conf /etc/supervisor/conf.d/supervisord.conf 
RUN apt-get install software-properties-common -y && apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0x5a16e7281be7a449 && add-apt-repository 'deb http://dl.hhvm.com/ubuntu utopic main' && apt-get update && apt-get install hhvm -y 
RUN cd ${HOMEDIR} && git clone ${GITDIR} && mv ./tybalt/* ./ && rm -r ./tybalt && git init 
RUN echo "* * * * * 'cd ${HOMEDIR} && /usr/bin/git pull origin master'" >> pullCron && crontab pullCron && rm pullCron 
EXPOSE 80 
CMD ["/usr/bin/supervisord"] 

PPP'ler:
Supervisord.conf:

[supervisord] 
autostart=true 
autorestart=true 
nodaemon=true 

[program:nginx] 
command=/usr/sbin/nginx -c /etc/nginx/nginx.conf 

[program:cron] 
command = cron -f -L 15 
autostart=true 
autorestart=true 
+0

Kopyala: http://stackoverflow.com/questions/20545554/how-do-i-start-cron-on-docker-ubuntu-base – Armand

+0

Merhaba @Armand, Bu cevabı buldum, ama yapmadım ' Bir kopyası nasıl anlıyoruz? Bu aslında bana 'cron -f' 'CMD'nin sonuna eklenmesini ekleyen bir soruydu ama bu, –

+0

Docker'ı çalıştırıyor gibi görünmüyor. Tek bir işlemi kullanarak bir örneği başlatıyor. Örnek olarak hangi komutu başlattığınızı ayrıntılı olarak açıklayabilir misiniz? Öğrendiklerim, daha fazla işlem için ihtiyaç duyuyorsanız, denetleyiciyi komut satırından çalıştırmayı ve mevcut olmasını istediğiniz sistem işlemlerini etkinleştirmekten sorumlu tutmalısınız. – Armand

cevap

4

amiri ile Crond başlayan ... vb her taahhüt için yeni bir imaj oluşturmaya ya da her etiketler gibi senin cron işleri yürütülmelidir. Burada sorun giderme emin cron'u olmak için atabileceğiniz adımlar

  1. çalıştıran cron kapta çalışıyor mu vardır? Kapsayıcıya giriş yapın ve öğrenmek için ps a | grep cron'u çalıştırın. Konteynere giriş yapmak için docker exec -ti CONTAINERID /bin/bash kullanın.

  2. Supervisord çalışıyor mu?

  3. Örneğimdeki kurulumda, aşağıdaki yönetici yapılandırması sorunsuz çalışıyor. Resim ubuntu:14.04. Dockerfile'da CMD ["/usr/bin/supervisord"] var.
[supervisord] 
nodaemon=true 
[program:crond] 
command = /usr/sbin/cron 
user = root 
autostart = true 
  1. sorun cron girişi veya cron olup olmadığını findout için başka basit cron işi deneyin. kaba giriş yaptığında crontab -e ile bu ekleyin:

    * * * * * echo "hi there" >> /tmp/test

  2. cron ilgili başka bilgiler için konteyner kayıtlarını kontrol edin:

    docker logs CONTAINERID | grep -i cron

Bunlar sadece bir kaç sorun giderme vardır Takip edebileceğiniz ipuçları.

6

Yalnızca son CMD ilkini geçersiz kıldığından (@xuhdev'in dediği gibi) Cron çalışmıyor. Burada belgelenmiştir: https://docs.docker.com/reference/builder/#cmd.

Dockerfile'da yalnızca bir adet CMD yönergesi bulunabilir. Birden fazla CMD'yi listelerseniz, sadece son CMD geçerli olur.

aynı kapta çalışan nginx ve cron sahip olmak istiyorsanız, kapsayıcınızın pid 1 süreç olacaktır amir çeşit (supervisord gibi veya diğerleri) kullanmak ve yönetmek gerekecektir kaplama işlemleri. Bu projenin şu şekilde yardımcı olacağını düşünüyorum: https://github.com/nbraquart/docker-nginx-php5-cron (başarmaya çalıştığınız şeyi yapıyor gibi görünüyor). Eğer cron ne olduğuna bağlı olarak

buna başka bir çözüm olacağını, için hazır -,

+0

Teşekkürler, bunu kontrol edip bir sonuçla en kısa zamanda geri döneceğim. –

+0

Dockerfile'umu süpervizörle güncelledim, iyi çalışıyor ama cron çalışmıyor, herhangi bir düşünce var mı? (benim PPS güncellememe bakın) Thx –

+0

Denetim odanızın konfigürasyonuna/içeriğine bağlı olabilir (ve denetleyici -n bayrağıyla ön planda çalışmalıdır) –

0

Ben CentOS bu kullandım ve çalışır:

CMD service crond start ; tail -f /var/log/cron 

benim Dockerfile geri kalanı sadece yum Cronie yükler ve CMD çalıştırılırken olacak böylece /var/log/cron dosyayı dokunur.