当前位置: 首页 > ai >正文

Docker容器跑定时任务脚本

最近搞了一个Docker容器跑脚本,想设置一个定时任务,每天8点运行一次,结果死活不成功。排查了一天,有一点当局者迷了,明明时间是对的,明明时区是对的,定时任务也是启动的,它就是不执行。于是,我自己整了一个干净的ubuntu,从0到1开始构建基础镜像,然后进行跑脚本测试,这里要注意/etc/cron.d下面的定时任务,一定要注明用户,它是系统的定时任务,如果不写用户,也是无法执行的,示例如下:

Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name command to be executed 

ailx10

网络安全优秀回答者

互联网行业 安全攻防员

去知乎 咨询

(1)准备好python脚本

import datetime# 定义日志文件的路径
log_file_path = '/root/test.log'# 获取当前时间
current_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")# 准备要写入日志的信息
log_message = f"{current_time} - Script has been executed successfully.\n"# 将信息写入日志文件
with open(log_file_path, 'a') as file:file.write(log_message)print(log_message)

(2)准备好启动定时任务的脚本

#!/bin/sh
service cron start
tail -f /var/log/cron.log

(3)准备好Dockerfile

# 使用你自己的基础镜像
FROM ubuntu:v1# 添加你的 Python 脚本到容器中
COPY test.py /root/test.py
COPY start.sh /root/start.shWORKDIR /root
RUN chmod +x /root/start.sh# 安装 cron 并设置 cron job
RUN apt-get update && apt-get install -y cron \&& echo "10 8 * * * root python3 /root/test.py >> /var/log/cron.log 2>&1" > /etc/cron.d/simple-cron \&& chmod 0644 /etc/cron.d/simple-cron \&& touch /var/log/cron.log && chmod 666 /var/log/cron.logCMD ["sh", "-c", "./start.sh"]

(4)构建镜像,启动容器

docker build -t test-cron:v1 .
docker run -d test-cron:v1

(5)这次定时任务,终于执行成功了


2025-04-27日 2更:我做了一点点优化,可以更加方便的管理这个容器了。首先这个容器是一直运行的,其次在容器中起了一个定时任务,最后如果容器退出了还能自动重启,完结撒花。

# 仅构建镜像(不启动)
docker-compose build# 后台启动
docker-compose up -d# 停止服务(不删除容器)
docker-compose stop# 强制停止并删除容器、网络等
docker-compose down

(1)更新了 Dockerfile

FROM mdr-base:v1# 安装 cron 服务
#RUN apt-get update && apt-get install -y cron# 配置定时任务
RUN touch /etc/cron.d/soar_cron \&& echo "10 10 * * * root python3 /root/soar_main.py" >> /etc/cron.d/soar_cron \&& chmod 644 /etc/cron.d/soar_cron# 创建启动脚本(启动 cron 并保持容器运行)
COPY run.sh /run.sh
RUN chmod +x /run.shCMD ["/run.sh"]

(2)新建了 docker-compose.yml

version: '3'
services:mdr-container:build: .volumes:- /home/ailx10/soar/tool:/rootrestart: alwaysnetwork_mode: host  # 启用宿主机网络

(3)启动脚本不变

#!/bin/sh
# 启动 cron 服务
service cron start# 保持容器运行
tail -f /dev/null

已开启送礼物

所属专栏 · 昨天 09:02 更新

网络技术基础

ailx10

网络安全话题下的优秀答主

最热内容 ·

PDF去除限制

发布于 2025-04-26 09:02・北京

http://www.xdnf.cn/news/2494.html

相关文章:

  • 分布式一致性算法起源思考与应用
  • 4.2.2 MySQL索引原理以及SQL优化
  • Bolt.diy 一键部署,“一句话”实现全栈开发
  • GAMES202-高质量实时渲染(homework1)
  • 【Redis】初识Redis
  • Java : GUI
  • MySQL(聚合函数)
  • 动态规划算法题1
  • 如何搭建行业社区?----以装修行业为例
  • 迷你世界UGC3.0脚本Wiki角色模块管理接口 Actor
  • 函数的使用
  • 诗词软件开发实战:从零开始构建现代诗歌应用
  • 北极花深度融合DeepSeek大模型,全面助力生物多样性智能分析图片生物多样性智能分析
  • Spring的Bean和自动配置
  • linux两个特殊的宏 _RET_IP_ 和_THIS_IP_ 实现
  • GPUStack昇腾Atlas300I duo部署模型DeepSeek-R1【GPUStack实战篇2】
  • 单片机-89C51部分:5、点亮LED
  • 纳米级形貌快速测量,白光干涉仪助力摩擦磨损学科发展
  • Vue Router ——路由基础详解(一)
  • Qt中的全局函数讲解集合(全)
  • 软件模块依赖关系管理与优化
  • 基于 STM32 与 RFID 技术的医院医疗器械数字化精细管理系统设计
  • Redis内存管理三部曲:淘汰、过期与惰性删除的协同哲学
  • 01_Long比较值 类型相同值不同
  • 幂等性处理解决方案实战示例
  • MySQL 表的约束(一)
  • 第一个 servlet请求
  • 【看穿操控的套路】
  • 【记录maven依赖规则-dependencyManagement,dependencies】
  • Matlab 报错:尝试将 SCRIPT vl_sift 作为函数执行: