我正在尝试在同一个 docker 镜像中添加 cronjob 和 Flask 服务器。我的 Dockerfile 看起来像这样
FROM python:alpine3.9
RUN apk --update add build-base libffi-dev openssl-dev curl
ADD crontab.txt /crontab.txt
ADD cronscript.sh /cronscript.sh
COPY entry.sh /entry.sh
RUN chmod 755 /cronscript.sh /entry.sh
RUN /usr/bin/crontab /crontab.txt
RUN /bin/sh /entry.sh
WORKDIR /
RUN mkdir app
COPY requirements.txt /app
RUN pip install -r /app/requirements.txt
COPY *.py /app/
WORKDIR /app
RUN chmod +x main.py
ENTRYPOINT [ "python" ]
CMD [ "main.py" ]
cronscript.sh
#!/bin/sh
echo "Starting cronjob"
curl http://localhost:4000/health
echo "Completed cronjob"
crontab.txt
*/15 * * * * /cronscript.sh >> /var/log/cron.log
入口.sh
#!/bin/sh
# start cron
/usr/sbin/crond -l 2
这不会启动 cronjob。等待一个小时后,我在 /var/log/cron.log
中没有看到任何数据。
好像我在我的烧瓶主函数中移动了 /bin/sh /entry.sh
行。一切正常。
烧瓶主函数
if __name__ == "__main__":
os.system("/bin/sh /entry.sh")
app.run(host='0.0.0.0', port=4000, debug=True)
有什么办法可以让这个 cron 工作从 Dockerfile 本身而不是 python 代码工作?这感觉就像一个黑客。
答案 0 :(得分:0)
您必须添加额外的行才能使其 cron 有效。请检查 (https://blog.knoldus.com/running-a-cron-job-in-docker-container/)