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.mzph.cn/news/903243.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Linux】什么是完全限定域名

FQDN 是 “完全限定域名” (Fully Qualified Domain Name) 的缩写。 FQDN 是一个互联网上特定计算机或主机的完整且唯一的域名。它详细说明了该主机在域名系统 (DNS) 层级结构中的确切位置。 一个 FQDN 通常由以下几个部分组成,从左到右依次是: 主机名…

小结:BFD

*BFD(双向转发检测,Bidirectional Forwarding Detection)是一种快速、轻量级的故障检测机制,用于检测网络中两点之间的连通性。它广泛应用于各种场景 1. 检测 IP 链路 应用场景: BFD 用于检测两台设备之间的 IP 层连…

配置Spark历史服务器,轻松查看任务记录

在大数据处理中,Spark是一个强大的分布式计算框架。但当Spark服务重启后,之前的运行记录就会消失,给我们排查问题和分析任务执行情况带来不便。这时,配置Spark历史服务器就显得尤为重要,它能帮助我们保存和查看历史任务…

(六)RestAPI 毛子(外部导入打卡/游标分页/Refit/Http resilience/批量提交/Quartz后台任务/Hateoas Driven)

文章目录 项目地址一、外部导入打卡功能1.1 创建实体1. Entry实体2. EntryImport实体3. 添加数据库配置4. 创建表 1.2 创建DTOs1.3 创建GetEnties Controller 二、游标分页2.1 创建所需要的DTOs1. 创建游标分页的请求参数2. 创建CollectionResponse3. 添加游标编码和解码的DTO …

Node.js CSRF 保护指南:示例及启用方法

解释 CSRF 跨站请求伪造 (CSRF/XSRF) 是一种利用用户权限劫持会话的攻击。这种攻击策略允许攻击者通过诱骗用户以攻击者的名义提交恶意请求,从而绕过我们的安全措施。 CSRF 攻击之所以可能发生,是因为两个原因。首先,CSRF 攻击利用了用户无法辨别看似合法的 HTML 元素是否…

Flink介绍——实时计算核心论文之Dataflow论文总结

数据流处理的演变与 Dataflow 模型的革新 在大数据处理领域,流式数据处理系统的发展历程充满了创新与变革。从早期的 S4 到 Storm,再到 MillWheel,每一个系统都以其独特的方式推动了技术的进步。S4 以其无中心架构和 PE(Processi…

Arduino 入门学习笔记(五):KEY实验

Arduino 入门学习笔记(五):KEY实验 开发板:正点原子ESP32S3 例程源码在文章顶部可免费下载(审核中…) 1. GPIO 输入功能使用 1.1 GPIO 输入模式介绍 在上一文章中提及到 pinMode 函数, 要对…

Centos9安装docker

1. 卸载docker 查看是否安装了docker yum list | grep docker卸载老版本docker,拷贝自官网 sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine卸载新版本…

Pgvector+R2R搭建RAG知识库

背景 R2R是一个采用Python编写的开源AI RAG框架项目,与PostgreSQL技术栈集成度高,运行需求资源少(主要是本人的Macbook air m1内存只有8G)的特点,对部署本地私有化化AI RAG应用友好。 Resource Recommendations Whe…

go中redis使用的简单介绍

目录 一、Redis 简介 二、Go中Redis的使用 1. 安装Go Redis包 2. 单机模式 连接示例 3. 哨兵模式 依赖 连接示例 三、Redis集群 1. 集群模式 集群部署 部署结构 使用redis-cli创建集群 连接示例 四、常用数据结构与操作 1. 字符串(String&#xff0…

北京工业大学25计专上岸经验分享

1.个人情况介绍 本科就读于河北双非,专业为计算机科学与技术,四级三次498,六级两次460,拿过几次校级奖学金,竞赛经历有蓝桥杯国三、数学竞赛省二。本科成绩排名靠前,保研保7排8,遗憾选择考研继…

在 Ubuntu 24.04 系统上安装和管理 Nginx

1、安装Nginx 在Ubuntu 24.04系统上安装Nginx,可以按照下面的步骤进行: 1.1、 更新系统软件包列表 在安装新软件之前,需要先更新系统的软件包列表,确保获取到最新的软件包信息。打开终端,执行以下命令: …

HarmonyOS4+NEXT星河版入门与项目实战(26)-----版本控制与代码托管

引言 随着移动应用开发技术的不断进步,华为推出的鸿蒙操作系统(HarmonyOS)以及其配套的集成开发环境DevEco Studio逐渐成为开发者关注的焦点。对于新手开发者来说,掌握版本控制和代码托管不仅是提高工作效率的关键,也是团队协作的重要基础。本文将介绍如何在使用DevEco S…

利用Arcgis自己绘制shp文件

1.选择自己想要创建的shp文件的位置 我是直接创建在连接文件夹中 2.右键-新建-shp 3.设置名称、要素类型、空间参考 4、点击创建要素 5、右侧选择图层、创建面 6、开始绘制,双击任意位置结束绘制 之后可以改一下shp文件的名字

【C/C++】深入理解指针(六)

文章目录 深入理解指针(六)1.sizeof和strlen的对比1.1 sizeof1.2 strlen1.3 sizeof和strlen的对⽐ 2.数组和指针笔试题解析2.1 ⼀维数组2.2 字符数组代码1:代码2:代码3:代码4:代码5:代码6: 2.3 ⼆维数组 3.…

探索大语言模型(LLM):语言模型从海量文本中无师自通

文章目录 引言:当语言模型学会“自己教自己”一、自监督学习:从“无标签”中挖掘“有监督”信号二、语言模型的自监督训练范式:两大经典路径1. 掩码语言模型(Masked Language Modeling, MLM)——以BERT为例2. 自回归语…

2025.5.4机器学习笔记:PINN文献阅读

2025.5.4周报 文献阅读题目信息摘要创新点网络架构实验结论不足以及展望 文献阅读 题目信息 题目: Physics-Informed Neural Network Approach for Solving the One-Dimensional Unsteady Shallow-Water Equations in Riverine Systems期刊: Journal o…

Unity Post Processing 小记 【使用泛光实现灯光亮度效果】

一、前言 本篇适用于Unity 2018 - 2019及以上版本,以默认渲染管线为例。文章内容源于个人研究尝试与网络资料收集,可能存在不准确之处。初衷是因新版本制作时老的Bloom插件失效,经研究后分享开启Bloom效果的方法。若在项目中使用Post Proces…

牟乃夏《ArcGIS Engine地理信息系统开发教程》学习笔记3-地图基本操作与实战案例

目录 一、开发环境与框架搭建 二、地图数据加载与文档管理 1. 加载地图文档(MXD) 2. 动态添加数据源 三、地图浏览与交互操作 1. 基础导航功能 2. 书签管理 3. 量测功能 四、要素选择与属性查询 1. 属性查询 2. 空间查询 五、视图同步与鹰眼…

Qt指ModbusTcp协议的使用

Modbus 是一套通信“语言”(协议),而 RS485 / RS232 / TCP 是通信“管道”(物理接口)。 编写modubusTcp程序,避免不了调试,首先用到的两个工具助手 poll是主机,slave是从机。主机也就是发送数据…