Warum nicht den cron-Dienst im Dockerfile laufen?

Während Suche für dieses Problem fand ich, dass: cron -f sollte den Dienst zu starten.

Also ich habe:

RUN apt-get install -qq -y git cron

Als Nächstes habe ich:

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

Meine dockerfile setzt ohne Fehler, aber der cron läuft nicht. Was kann ich tun, um starten Sie den cron-Dienst mit einer zusätzlichen Zeile?

PS:

Ich weiß, dass die git-Funktion in meinem cron sollte eigentlich ein Haken sein, aber für mich (und wahrscheinlich auch für andere) dies ist über das lernen, wie zu setzen crons mit Docker 🙂

PPS:

Komplette Dockerfile (AKTUALISIERT):

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:

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
  • Duplikat zu : stackoverflow.com/questions/20545554/...
  • Hi @Armand, ich habe diese Antwort, aber ich verstehe nicht, wie es ein Duplikat? Das war eigentlich die Frage, die mich hinzufügen cron -f fügen Sie am Ende der CMD aber das scheint nicht zu laufen
  • Andockfenster initiiert eine Instanz mit einem einzigen Prozess. Können Sie erläutern, wie in dem Befehl, den Sie begonnen, Sie Beispiel mit? Was ich gelernt habe, ist, dass, wenn Sie mehr Prozesse laufen, sollten Sie überlegen, läuft Betreuer von der Befehlszeile aus und machen es verantwortlich für die Aktivierung der system-Prozesse, die Sie wünschen, zur Verfügung zu haben.
  • bitte siehe mein update
  • hmm, ich bin traurig über meine doppelte Nachricht, cron -f sollte in der Tat funktionieren. was bekommen Sie, beim ausführen von "docker logs CONTAINER" ? ich bin curiouse wenn der cron ist das schreiben etwas in den syslog.
  • nicht Ihre zweite CMD überschreibt Ihre erste?
  • Aha, danke @xuhdev das macht Sinn, ich werde überprüfen Sie es heraus und erhalten zurück zu Ihnen so bald wie möglich.
  • Ich habe aktualisiert mein dockerfile mit supervisord, setzt es gut, aber der cron läuft nicht, irgendwelche Gedanken? (siehe mein update PPS in Frage) Thx
  • Ich weiß nicht wirklich nutzen supervisord. Ich würde vorschlagen, Sie zu cron und nginx in zwei Behälter und verwenden Sie einen Daten-container zum Austausch von Daten zwischen Ihnen. Es ist leichter zu pflegen und in vielen Fällen einfacher zu Debuggen.

Schreibe einen Kommentar