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

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・北京

相关文章:

  • Spring 与 ActiveMQ 的深度集成实践(四)
  • UE 新建一个自带光照的场景
  • 【Linux系统】静态库与动态库
  • DLMS COSEM 数据对象 与 ASN.1 BER 编码 —— 详解一览
  • 视觉/深度学习/机器学习相关面经总结(2)(持续更新)
  • 【C++ 类和数据抽象】消息处理示例(2)
  • 展销编辑器操作难度及优势分析​
  • 微博安卓版话题热度推荐算法与内容真实性分析
  • Linux CentOS 安装Python 3.8.0
  • 代数拓扑和黎曼几何有什么联系吗?
  • 贪心算法和动态规划
  • 服务器异地备份,服务器异地备份有哪些方法?
  • 如何识别DDoS攻击类型及有效防护?一篇简明指南
  • OA 系统如何做好 DDoS 防护?从架构设计到实战防御的完整方案
  • 【HPC存储性能测试】01-OpenMPI部署
  • 树状数组单点操作+前缀K差分->区间K操作 -#131-#132
  • npm、pnpm 和 yarn 包管理工具
  • SpringBoot常用注解解析汇总
  • 吴恩达深度学习作业之风格转移Neural Style Transfer (pytorch)
  • Python生活手册-元组:保险柜与瑞士军刀
  • 清华成立人工智能医院,将构建“AI+医疗+教育+科研”闭环
  • 关键词看中国经济“一季报”:稳,开局良好看信心
  • 对话|男篮国手杨瀚森:参加NBA选秀,去更大的舞台追梦
  • 文昌市委原书记龙卫东已任海南省人社厅党组书记
  • 《卿本著者》译后记等内容被指表述不当,江苏人民出版社:即日下架
  • 五一假期上海路网哪里易拥堵?怎么错峰更靠谱?研判报告来了