docker 容器中使用 crontab

docker 中使用crontab

相关命令

  • 使用 python:2.7.13 镜像,是基于buildpack-deps:jessie镜像的,是一个Debian系统。
  • docker中使用cron执行python脚本时:

    1
    sys.path = ['/var/code/XHTSpider/XHTSpider/es', '/usr/lib/python2.7', '/usr/lib/python2.7/plat-x86_64-linux-gnu', '/usr/lib/python2.7/lib-tk', '/usr/lib/python2.7/lib-old', '/usr/lib/python2.7/lib-dynload', '/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages']

    在直接使用python命令执行脚本时

    1
    sys.path = ['/var/code/XHTSpider/XHTSpider/es', '/usr/local/lib/python27.zip', '/usr/local/lib/python2.7', '/usr/local/lib/python2.7/plat-linux2', '/usr/local/lib/python2.7/lib-tk', '/usr/local/lib/python2.7/lib-old', '/usr/local/lib/python2.7/lib-dynload', '/usr/local/lib/python2.7/site-packages']

    注意 dite-packages 和 site-packages。然而在使用pip安装包时,是安装在site-packages下的,所以在要在要执行的脚本开始部分加上

    1
    2
    import sys
    sys.path.append("/usr/local/lib/python2.7/site-packages")

    这可能和docker容器的用户管理有关,执行cron的用户环境变量的不同。

  • debian 中 crontab 程序叫 cron,服务名也是cron,不同系统的使用方式会有所不同。

    1
    2
    3
    service cron start/stop/restart/reload/status
    # 直接启动
    cron

Dockerfile

1
2
3
4
5
6
7
8
9
10
11
12
13
14
FROM python:2.7.13

WORKDIR /root

COPY ./etc/apt.sources.list /etc/apt/sources.list

RUN apt-get update -y && \
apt-get install -y cron && \
touch /var/log/cron.log

ADD ./etc/crontab /etc/cron.d/crontab

# tail 可以防止容器自动退出运行
CMD cron && tail -f /var/log/cron.log

相关文件

  1. ./etc/apt.sources.list

    apt-get 使用阿里云源

    1
    2
    3
    4
    5
    6
    deb http://mirrors.aliyun.com/debian wheezy main contrib non-free
    deb-src http://mirrors.aliyun.com/debian wheezy main contrib non-free
    deb http://mirrors.aliyun.com/debian wheezy-updates main contrib non-free
    deb-src http://mirrors.aliyun.com/debian wheezy-updates main contrib non-free
    deb http://mirrors.aliyun.com/debian-security wheezy/updates main contrib non-free
    deb-src http://mirrors.aliyun.com/debian-security wheezy/updates main contrib non-free
  1. ./etc/crontab

    1
    */1 * * * * root echo $(date) >> /var/log/cron.log 2>&1

参考

  1. docker下计划任务crontab的使用方法
  2. crontab 使用
  3. Running cron within a docker debian:jessie container
  4. Linux crontab定时执行任务 命令格式与详细例子
  5. apt-get安装源替换 阿里云源
  6. Python 安装路径, dist-packages 和 site-packages 区别