您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

在docker中运行cron python作业

在docker中运行cron python作业

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

列表中存在特定于cron的问题和特定于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/busy@R_148_2419@:latest

# Create logs volume
VOLUME /var/log

CMD  ["true"]

将在cron下运行的脚本是test.py

#!/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)

为了将环境变量传递给,我想在cron下运行,遵循托马斯的建议,并把一个crontab片段为每个脚本(或脚本组)的脚本,在需要的泊坞窗环境变量的/etc/cron.d一个占位符XXXXXXX,必须被设置。

# 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)

Dockerfile说的容器,其中cron作业运行如下:

# 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"]

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

python 2022/1/1 18:14:30 有556人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶