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