当前位置: 首页 > 面试题库 >

如何在Docker容器中运行Cron作业?

胡墨竹
2023-03-14
问题内容

我正在尝试在调用shell脚本的docker容器中运行cronjob。

昨天我一直在网上搜索和堆栈溢出,但是我找不到真正可行的解决方案。
我怎样才能做到这一点?

编辑:

我已经创建了一个(带注释的)github存储库,上面有一个工作的docker cron容器,该容器以给定的时间间隔调用shell脚本。


问题答案:

您可以将crontab复制到映像中,以使从该映像启动的容器运行该作业。

请参阅“ 运行与码头工人cron作业从”
朱利安·布雷他 Ekito/docker- cron

让我们创建一个名为“ hello-cron” 的新文件来描述我们的工作。

* * * * * echo "Hello world" >> /var/log/cron.log 2>&1
# An empty line is required at the end of this file for a valid cron file.

以下Dockerfile描述了构建映像的所有步骤

FROM ubuntu:latest
MAINTAINER docker@ekito.fr

RUN apt-get update && apt-get -y install cron

# Copy hello-cron file to the cron.d directory
COPY hello-cron /etc/cron.d/hello-cron

# Give execution rights on the cron job
RUN chmod 0644 /etc/cron.d/hello-cron

# Apply cron job
RUN crontab /etc/cron.d/hello-cron

# Create the log file to be able to run tail
RUN touch /var/log/cron.log

# Run the command on container startup
CMD cron && tail -f /var/log/cron.log

正如Nathan Lloyd在评论中指出的:

关于陷阱的快速说明:
如果要添加脚本文件并告诉cron运行它,请记住, 如果您忘记Cron会静默失败
RUN chmod 0744 /the_script

或者,确保您的工作本身直接重定向到stdout /stderr而不是日志文件,如hugoShaka:

 * * * * * root echo hello > /proc/1/fd/1 2>/proc/1/fd/2

将最后一个Dockerfile行替换为

CMD ["cron", "-f"]

另请参阅(关于cron -f,即cron“前景”)“ docker ubuntu cron-f无法正常工作 ”

生成并运行它:

sudo docker build --rm -t ekito/cron-example .
sudo docker run -t -i ekito/cron-example

请耐心等待2分钟,您的命令行应显示:

Hello world
Hello world

Eric在评论中添加:

请注意,tail如果在映像构建过程中创建了正确的文件,则可能无法显示正确的文件。
在这种情况下,您需要在容器运行时创建或触摸文件,以便尾部拾取正确的文件。



 类似资料:
  • 问题内容: 我试图在docker容器中运行cron作业 但对我没有用 我的容器只有cron.daily和cron.weekly文件 crontab,cron.d,cron.hourly …在我的容器中不存在 crontab -e也无法正常工作 我的容器使用/ bin / bash运行 问题答案: 这是我运行我的cron容器之一的方法。 Dockerfile: crontab.txt entry.s

  • 我创建了一个(有注释的)github存储库,其中有一个工作的docker cron容器,它以给定的时间间隔调用一个shell脚本。

  • 问题内容: 我想以分离模式在docker容器中运行python cron作业。我的设置如下: 我的python脚本是test.py 我的cron文件是my-crontab 而我的Dockerfile是 这种方法潜在的问题是什么?还有其他方法,它们的优缺点是什么? 问题答案: 我在尝试使cron作业在docker容器中运行时遇到的几个问题是: Docker容器中的时间不是UTC的本地时间; dock

  • 这种方法的潜在问题是什么?是否还有其他方法,它们的利弊是什么?

  • 问题内容: 我正在研究Centos7。我有一个运行Jenkins的Docker容器。在那个Jenkins容器中,我必须构建并运行其他Docker容器。但是詹金斯不认识码头工人。我能够执行一个shell并将docker安装在容器中。但是,是否有可能让容器在主机上使用我的docker- engine?如何使用? 在Jenkins-(docker)-容器中安装Docker的最佳选择是什么? 问题答案:

  • 我已经在我的主机虚拟机上安装了docker。现在想用vi创建一个文件。 但它向我展示了一个错误: