策展人作为容器中的cron作业无法正常工作

时间:2017-01-09 22:13:34

标签: docker cron

我遇到运行cron作业的容器的问题。该作业执行策展人删除一些弹性搜索索引。我在stackoverflow上看了很多类似的帖子,但我仍然没有得到它。这项工作似乎打电话给策展人,但指数没有被删除。如果我手动运行它,同样的命令也可以工作。

这是我的Dockerfile

FROM ubuntu:xenial

RUN apt-get update && apt-get install python-pip rsyslog -y
RUN groupadd -r curator && useradd -r -g curator curator

RUN pip install elasticsearch-curator

RUN apt-get install cron

COPY delete_indices_cron /etc/cron.d/delete_indices_cron
COPY ./delete_indices.sh /opt/delete_indices.sh
COPY ./configs /opt/config

RUN ["crontab", "/etc/cron.d/delete_indices_cron"]n
RUN chmod 644 /etc/cron.d/delete_indices_cron
RUN chmod 744 /opt/delete_indices.sh
RUN touch /var/log/cron.log
CMD ["rsyslogd"]
ENTRYPOINT ["cron","-f","&&", "tail","-f","/var/log/cron.log"]

我随后用

运行图像
docker run -d --link elasticsearch:elasticsearch --name curator mycurator4

和docker ps输出

CONTAINER ID        IMAGE                                COMMAND                  CREATED             STATUS              PORTS                                                                        NAMES
eea96a48aa3a        mycurator4                           "cron -f && tail -f /"   15 minutes ago      Up 15 minutes                                                                                    curator
e584c9b090c8        vagrant-registry.vm:5000/sslserver   "python /sslServer/ss"   2 weeks ago         Up 2 weeks          0.0.0.0:12121->12121/tcp                                                     sslserver
20eee9943664        kibana:4                             "/docker-entrypoint.s"   2 weeks ago         Up 2 weeks          0.0.0.0:5601->5601/tcp                                                       kibana
8c462586982e        logstash:2                           "/docker-entrypoint.s"   2 weeks ago         Up 2 weeks          0.0.0.0:5044->5044/tcp, 0.0.0.0:12201->12201/tcp, 0.0.0.0:12201->12201/udp   logstash
c971fa3e357b        elasticsearch:2                      "/docker-entrypoint.s"   2 weeks ago         Up 2 weeks          0.0.0.0:9200->9200/tcp, 9300/tcp                                             elasticsearch
4af9a78a4b1f        jenkins                              "/bin/tini -- /usr/lo"   2 weeks ago         Up 2 weeks          0.0.0.0:8080->8080/tcp, 50000/tcp   

                                     jenkins

更新:问题是策展人无法在环境中找到命令。当我把它改成相对路径时,问题就解决了。另外根据一些建议,我从/opt/delete_indices.sh中删除了.sh,因为ansible"不喜欢这个"!。

1 个答案:

答案 0 :(得分:0)

恕我直言,这是一个方形钉,圆孔情况。

相反,我只会将策展人的内容和必要的文件添加到图像中,并使用主机系统cron来运行容器。这将确保您拥有正确的环境变量和cron可能遇到的其他misc问题。

要回答您的问题,这将是您在容器中运行的命令:

package-b

第一个问题是package-a,它不会像你想要的那样表现,因为命令cron -f && tail -f /var/log/cron.log rsyslogd退出导致docker在&&完成时退出,因此从不打电话给cron。至少,这是我在本地运行cron作为测试时发现的。其次,如果您想查看输出,请运行tail -f