【发布时间】:2017-08-18 17:41:57
【问题描述】:
我编写了一个非常小的程序,主要由 Scrapy 刮板组成。我把它打包在一个 docker 容器中,需要 cron 调用刮板。
我的 docker-compose 文件是:
version: '2'
services:
admin-panel:
env_file: ./Admin-Panel/.env
build: ./Admin-Panel/
volumes:
- ./Admin-Panel/app:/code/app
- ./Admin-Panel/flaskadmin.py:/code/flaskadmin.py
ports:
- "5000:5000"
scraper:
env_file: ./Admin-Panel/.env
build: ./Scraper/
volumes:
- ./Scraper/spiders:/spiders
我的 Scraper Dockerfile 是:
FROM ubuntu:latest
ENV TERM xterm
RUN apt-get update
RUN apt-get install -y python3-pip python3.5-dev build-essential
RUN apt-get install -y libssl-dev nano cron libpq-dev libffi-dev curl
ADD ./requirements /requirements
ADD crontab /etc/cron.d/scrapers
RUN pip3 install --upgrade pip
RUN pip3 install -r /requirements/base.txt
RUN touch /var/log/cron.log
CMD cron && tail -f /var/log/cron.log
我的 crontab 是(带有尾随的新行):
* * * * * root /usr/local/bin/scrapy runspider /spiders/myspider.py
* * * * * root /bin/date >> /tmp/cron_output
这在我运行 Sierra 的 Mac 上本地运行时效果很好,但是当我在运行 Amazon Linux AMI 的 Amazon EC2 实例上运行时,不会调用 crons。我使用 Filezilla 将文件从我的 Mac 传输到我的 Amazon EC2 实例。
AWS EC2:
Docker 版本 1.12.6,构建 7392c3b/1.12.6
我的 MacBook:
Docker 版本 17.03.0-ce,构建 60ccb22
如果我添加行
* * * * * root /bin/date >> /tmp/cron_output
使用 crontab -e 也没有任何反应。文件 cron.log 为空。
更新:
我安装了 rsyslog 然后启动它:
service rsyslog start
现在在 /var/log/syslog 中
3 月 25 日 21:49:01 4406b0e05b9f CRON[464]:无法为指定会话创建/删除条目
【问题讨论】:
-
一个 docker 容器不能运行一整套服务。 crond 很可能根本没有在您的容器中运行,除非您已明确配置它这样做。
标签: ubuntu docker amazon-ec2 cron ubuntu-16.04