我已经从Dockerfile中创建了一个Docker镜像,并且我希望在基于该镜像的容器运行时定期执行cronjob。我的Dockerfile是这样的(相关部分):
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"]
创建镜像后,我运行一个容器并确认确实添加了cronjob:
crontab -l
*/2 * * * * node /srv/visitor/visitor.js
现在,问题是cronjob从未执行。我当然已经测试了从控制台手动运行时,“node/srv/visitor/visitor.js”是否可以正确执行。
有任何想法吗?
最佳答案
确切地回答这个问题有点棘手,因为我没有时间进行测试,但是您有很多选择可以解决:
CMD
启动cron并将其放在前台(cron -f
)。 CMD
或ENTRYPOINT
脚本来启动cron和您的进程。唯一的问题是您将需要谨慎处理信号,否则可能会遇到僵尸进程。 在您的情况下,如果您只是在玩耍,我会选择最后一个选择,如果更严重的话,我会选择一个流程经理。
关于cron - 在Docker容器中,cronjobs没有得到执行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29391327/