Ich habe ein Docker-Bild, aus einer Dockerfile, und ich möchte einen Cronjob regelmäßig ausgeführt, wenn ein Container auf dieses Bild basiert ausgeführt wird. Mein Dockerfile ist dies (die relevanten Teile):Innerhalb Docker Container, Cronjobs werden nicht ausgeführt
FROM l3iggs/archlinux:latest
COPY source /srv/visitor
WORKDIR /srv/visitor
RUN pacman -Syyu --needed --noconfirm \
&& pacman -S --needed --noconfirm make gcc cronie python2 nodejs phantomjs \
&& printf "*/2 * * * * node /srv/visitor/visitor.js \n" >> cronJobs \
&& crontab cronJobs \
&& rm cronJobs \
&& npm install -g node-gyp \
&& PYTHON=/usr/sbin/python2 && export PYTHON \
&& npm install
EXPOSE 80
CMD ["/bin/sh", "-c"]
Nach der Erstellung des Bildes I einen Behälter laufen und stellen Sie sicher, dass in der Tat die cronjob wurde hinzugefügt:
crontab -l
*/2 * * * * node /srv/visitor/visitor.js
Nun, das Problem ist, dass die Cronjob wird nie ausgeführt. Ich habe natürlich getestet, dass "node /srv/visitor/visitor.js" korrekt ausgeführt wird, wenn es manuell von der Konsole aus ausgeführt wird.
Irgendwelche Ideen?
cron benötigt einen Daemon. Die Hälfte des Prozesses erstellt den Job, der sich im Dateispeicher des Cron befindet. Die andere Hälfte von Cron führt Jobs aus. Sie könnten sich anschauen: http://stackoverflow.com/questions/20545554/how-do-i-start-cron-on-docker-ubuntu-base. Wenn Sie möchten, dass der Cron-Daemon des Hosts Ihre Cron-Arbeit erledigt, müssten Sie wahrscheinlich das Cron-Verzeichnis des Hosts mounten, wenn Sie den Container starten. Das klingt aber nicht gut! – Greg
Greg, warum fügst du das nicht als Antwort hinzu? Ich wollte das selbe sagen. Beachten Sie auch, dass das Phusion-Image mit cron running geliefert wird. –
@Greg Ich kann jetzt verstehen, was Sie sagen. Die Sache ist, ich möchte entweder das Cron-Verzeichnis des Hosts nicht mounten oder systemd im Container ausführen (wie bei einigen anderen Vorschlägen). Ich denke, beide Methoden würden ein ansonsten sauberes System unnötigerweise "verschmutzen". Was sind meine Alternativen? Kann ich cronie ohne systemd ausführen? Oder gibt es eine Alternative? – dsljanus