news 2026/4/23 10:23:47

如何在 Docker 容器下运行 cronjob ?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
如何在 Docker 容器下运行 cronjob ?

当您想要安排计划任务,可以使用内置在 macOS 和 Linux 中的常见工具,比如 cron,或者像 AWS Lambda 这样的特殊工具。Cron 不如 AWS Lambda 强大,但它在 Unix 系统的后台任务中工作得很好,特别是在使用容器的情况下。然而,对于 Docker 来说这有点复杂,因为不能简单地从终端开始新的 cron 作业,并期望它工作。

How to Dockerize a Cron Job

要在 Docker 容器中运行 cron 作业,您需要使用 cron 并在 Docker 容器的前台运行它。

下面是一个如何设置的例子:

Create Cron File

创建一个文件,其中包含要在 Docker 容器下运行的所有 cron 作业。

cat cron

我们的示例文件如下:

* * * * * echo "Current date is `date`" > /var/log/cron

Create Dockerfile

接下来,创建一个安装 cron 服务的Dockerfile,并将脚本复制到容器。

在这里,我们提供了 3 个 Dockerfile 示例,它们使用不同的操作系统。

Dockerfile with Alpine Linux

FROM alpine:3 # Copy cron file to the container COPY cron /etc/cron.d/cron # Give the permission RUN chmod 0644 /etc/cron.d/cron # Add the cron job RUN crontab /etc/cron.d/cron # Link cron log file to stdout RUN ln -s /dev/stdout /var/log/cron # Run the cron service in the foreground CMD [ "crond", "-l", "2", "-f" ]

Dockerfile with Apache and PHP

FROM php:8.0-apache # Install cron RUN apt update && \ apt -y install cron # Copy cron file to the container COPY cron /etc/cron.d/cron # Give the permission RUN chmod 0644 /etc/cron.d/cron # Add the cron job RUN crontab /etc/cron.d/cron # Link cron log file to stdout RUN ln -s /dev/stdout /var/log/cron # Start cron service RUN sed -i 's/^exec /service cron start\n\nexec /' /usr/local/bin/apache2-foreground

Dockerfile with Ubuntu Linux

FROM ubuntu:latest # Install cron deamon RUN apt update && apt install -y cron # Copy cron file to the container COPY cron /etc/cron.d/cron # Give the permission RUN chmod 0644 /etc/cron.d/cron # Add the cron job RUN crontab /etc/cron.d/cron # Link cron log file to stdout RUN ln -s /dev/stdout /var/log/cron # Run the cron service in the foreground CMD ["cron", "-f"]

Build and Run Container

当前目录中有两个文件,一个是 cron, 它包含了 cronjob。 一个是 Dockerfile, 它有 Docker 的构建指令。运行以下命令使用 Dockerfile 构建 Docker 镜像。

docker build -t my_cron .

镜像构建成功后,启动容器:

docker run -d my_cron

这将启动容器下的 cron 守护进程,它将执行 cron 文件中定义的所有计划作业。

Test Setup

我们已经链接了 cron 日志文件/var/log/cron/dev/stdout,Cron 服务生成的所有日志
可以使用docker logs命令查看。

首先,使用docker ps命令查找容器 id 或名称。

docker ps

然后检查 Docker 容器的日志文件。

docker logs container_id

在 cronjobs 中,我打印了当前日期并把它们写入日志中。

输出如上所示,这意味着 cron 作业在 Docker 容器下正常运行。

我的开源项目

  • course-tencent-cloud(酷瓜云课堂 - gitee仓库)
  • course-tencent-cloud(酷瓜云课堂 - github仓库)
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/22 23:30:24

60天自我松绑:一个“被困住”成长者的破局宣言

困局中的觉醒凌晨三点的屏幕冷光,映照出空洞的眼神。拇指机械滑动,从短视频跳转到“深度好文”,信息潮水般涌来,退去后却留下更深的虚无。四小时后,闹钟将唤醒我奔赴那重复千次的工位。内心尖叫着“这不是我想要的生活…

作者头像 李华
网站建设 2026/4/16 15:59:01

Comsol电弧冲击击穿模型:多相流模拟的奇妙之旅

comsol电弧冲击击穿模型,采用多相流模拟电弧的产生,可以得到电弧温度场,流体场,电磁场分布, 最近在研究电气相关的模拟项目时,接触到了Comsol的电弧冲击击穿模型,简直打开了新世界的大门&#…

作者头像 李华
网站建设 2026/4/18 23:00:18

微电网传统下垂控制策略下负载投切影响探究

微电网采用传统下垂控制策略,由于线路参数不一致导致无功功率不能均分的模型,分别在三个时段测试负载投切的影响微电网在电力系统中发挥着越来越重要的作用,传统下垂控制策略是其常用的控制方式之一。然而,在实际运行中&#xff0…

作者头像 李华
网站建设 2026/4/23 7:33:29

高速列车驾驶员情境意识动态建模及生理反应机制研究

简介 随着高速列车智能化水平的提升,驾驶安全与驾驶员认知状态成为关键研究焦点。 本文基于ErgoLAB人机环境同步平台V3.0,构建了高速列车驾驶模拟环境,采集多模态生理信号(包括脑电、心电与眼动)以研究驾驶员情景意识…

作者头像 李华
网站建设 2026/4/18 19:59:46

从“夯基”到“跃升”:2025-2026年职业教育政策核心转向与从业者应对

站在2026年的起点回望,职业教育正经历从“规模扩张”到“内涵跃升”的关键转型。随着《关于深化现代职业教育体系建设改革的意见》《职业教育产教融合赋能提升行动实施方案(2023—2025年)》等政策的落地,2025-2026年将成为职业教育…

作者头像 李华
网站建设 2026/4/21 0:46:16

在玩永磁同步电机无位置控制时,切换策略是个让人又爱又恨的活。今天咱们就聊聊全速域切换那些实战细节,手把手拆几个典型代码块,顺便把仿真模型里的坑点捋清楚

永磁同步电机(pmsm,全速度切换无位置传感器控制(高速可以是超螺旋滑模) 低速可以是脉振高频方波注入,if开环等仿真模型。 切换有加权切换和双坐标切换。 单个链接只有一种。 可以送单独卡尔曼滤波或者扩张状态观测器。…

作者头像 李华