最近搞了一個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?北京