Ho creato un'immagine Docker, da un Dockerfile, e voglio un cronjob eseguito periodicamente quando un contenitore basato su questa immagine è in esecuzione. Il mio Dockerfile è questo (le parti rilevanti):All'interno del contenitore Docker, i cronjob non vengono eseguiti
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"]
Dopo la creazione dell'immagine ho eseguito un contenitore e verificare che effettivamente il cronjob è stato aggiunto:
crontab -l
*/2 * * * * node /srv/visitor/visitor.js
Ora, il problema è che il cronjob non viene mai eseguito. Ho, ovviamente, verificato che "node /srv/visitor/visitor.js" sia eseguito correttamente quando viene eseguito manualmente dalla console.
Qualche idea?
cron richiede un daemon. metà del processo sta creando il lavoro, che risiede nell'archiviazione dei file di cron. L'altra metà di cron sta eseguendo lavori. potresti dare un'occhiata a: http://stackoverflow.com/questions/20545554/how-do-i-start-cron-on-docker-ubuntu-base. Se vuoi che il demone cron dell'host esegua il tuo cronwork, probabilmente dovresti montare la directory del cron degli host quando avvii il contenitore? Ciò non suona bene però! – Greg
Greg, perché non lo aggiungi come risposta? Stavo per dire lo stesso. Inoltre, l'immagine di Phusion viene fornita con cron in esecuzione. –
@Greg Ora posso capire cosa stai dicendo. Il fatto è che non voglio né montare la directory del cron dell'host, né eseguire systemd all'interno del contenitore (come da altri suggerimenti). Mi sento come se entrambi questi metodi "inquinassero" inutilmente un sistema altrimenti pulito. Quali sono le mie alternative? Posso eseguire cronie senza systemd? O c'è un'alternativa? – dsljanus