当前位置: 首页 > 知识库问答 >
问题:

在docker中运行cron python作业

冀永寿
2023-03-14
#!/usr/bin/env python
import datetime
print "Cron job has run at %s" %datetime.datetime.now()
* * * * * /test.py > /dev/console
FROM ubuntu:latest
RUN apt-get update && apt-get install -y software-properties-common python-software-properties && apt-get update

RUN apt-get install -y python cron
ADD my-crontab /
ADD test.py /
RUN chmod a+x test.py

RUN crontab /my-crontab
ENTRYPOINT cron -f

这种方法的潜在问题是什么?是否还有其他方法,它们的利弊是什么?

共有1个答案

曾丰茂
2023-03-14

我在尝试让cron作业在docker容器中运行时遇到的几个问题是:

  1. docker容器中的时间是UTC而不是本地时间;
  2. docker环境不会传递给cron;
  3. 正如Thomas所指出的,cron日志记录还有很多需要的地方,通过docker访问它需要一个基于docker的解决方案。

列表中有特定于cron的问题和特定于docker的问题,但无论如何,必须解决这些问题才能使cron工作。

# Dockerfile for test-logs

# BUILD-USING:        docker build -t test-logs .
# RUN-USING:          docker run  -d -v /t-logs --name t-logs test-logs
# INSPECT-USING:      docker run -t -i  --volumes-from t-logs ubuntu:latest /bin/bash

FROM stackbrew/busybox:latest

# Create logs volume
VOLUME /var/log

CMD  ["true"]
#!/usr/bin/env python

# python script which needs an environment variable and runs as a cron job
import datetime
import os

test_environ = os.environ["TEST_ENV"]
print "Cron job has run at %s with environment variable '%s'" %(datetime.datetime.now(), test_environ)
# placed in /etc/cron.d 
# TEST_ENV is an docker environment variable that the script test.py need

TEST_ENV=XXXXXXX
#
* * * * * root python /test.py >> /var/log/test.log

不是直接调用cron,而是将cron包装在一个python脚本中,该脚本可以执行以下操作:1。从docker环境变量中读取环境变量,并在crontab片段中设置环境变量

#!/usr/bin/env python

# run-cron.py
# sets environment variable crontab fragments and runs cron

import os
from subprocess import call
import fileinput

# read docker environment variables and set them in the appropriate crontab fragment
environment_variable = os.environ["TEST_ENV"]

for line in fileinput.input("/etc/cron.d/cron-python",inplace=1):
    print line.replace("XXXXXXX", environment_variable)

args = ["cron","-f", "-L 15"]
call(args)

运行cron作业的容器的DockerFile如下所示:

# BUILD-USING:        docker build -t test-cron .
# RUN-USING docker run --detach=true --volumes-from t-logs --name t-cron test-cron

FROM debian:wheezy
#
# Set correct environment variables.
ENV HOME /root
ENV TEST_ENV test-value

RUN apt-get update && apt-get install -y software-properties-common python-software-properties && apt-get update

# Install Python Setuptools
RUN apt-get install -y python cron

RUN apt-get purge -y python-software-properties software-properties-common && apt-get clean -y && apt-get autoclean -y && apt-get autoremove -y && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*

ADD cron-python /etc/cron.d/
ADD test.py /
ADD run-cron.py /

RUN chmod a+x test.py run-cron.py

# Set the time zone to the local time zone
RUN echo "America/New_York" > /etc/timezone && dpkg-reconfigure --frontend noninteractive tzdata

CMD ["/run-cron.py"]

最后,创建容器并运行它们:

    null
 类似资料:
  • 问题内容: 我想以分离模式在docker容器中运行python cron作业。我的设置如下: 我的python脚本是test.py 我的cron文件是my-crontab 而我的Dockerfile是 这种方法潜在的问题是什么?还有其他方法,它们的优缺点是什么? 问题答案: 我在尝试使cron作业在docker容器中运行时遇到的几个问题是: Docker容器中的时间不是UTC的本地时间; dock

  • 问题内容: 我试图在docker容器中运行cron作业 但对我没有用 我的容器只有cron.daily和cron.weekly文件 crontab,cron.d,cron.hourly …在我的容器中不存在 crontab -e也无法正常工作 我的容器使用/ bin / bash运行 问题答案: 这是我运行我的cron容器之一的方法。 Dockerfile: crontab.txt entry.s

  • 问题内容: 我正在尝试在调用shell脚本的docker容器中运行cronjob。 昨天我一直在网上搜索和堆栈溢出,但是我找不到真正可行的解决方案。 我怎样才能做到这一点? 编辑: 我已经创建了一个(带注释的)github存储库,上面有一个工作的docker cron容器,该容器以给定的时间间隔调用shell脚本。 问题答案: 您可以将crontab复制到映像中,以使从该映像启动的容器运行该作业。

  • 我创建了一个(有注释的)github存储库,其中有一个工作的docker cron容器,它以给定的时间间隔调用一个shell脚本。

  • 问题内容: 好的,我几乎用尽了所有线程和文章,但是仍然无法使我的apache网络服务器在Centos Docker Container上以独立模式运行。 这是我的简化Dockerfile 我的starservice脚本只有 我可以构建良好,但是似乎无法在守护程序/独立模式下运行容器。我怎么做? 我正在使用它以独立模式运行容器 我必须登录到容器并启动服务以使Web服务器运行。 问题答案: 这是经典的

  • 这是我的docker-commentfile.yaml: 这是一个由两个cotnainer组成的组合,一个使用mysql,一个使用Java代码,使用db,现在我需要运行它,我有一个错误: 有人知道错误的原因吗?