如何在我的eventstore镜像中运行cron作业?

时间:2018-06-02 15:18:13

标签: docker cron

我正在尝试在Docker镜像中运行一个cron作业。当我使用此$( ".selectable" ).parent().parent().find('input').val('somevalue'); $( ".selected" ).each(function(index) { $(this).on("click", function(){ This is multiple elements have their own function //var somevalue = $(this).attr('id'); }); });

Dockerfile

然后它工作正常。如果我将FROM ubuntu:latest # Install cron RUN apt-get update RUN apt-get install cron # Add crontab file in the cron directory ADD crontab /etc/cron.d/simple-cron # Add shell script and grant execution rights ADD script.sh /script.sh RUN chmod +x /script.sh # Give execution rights on the cron job RUN chmod 0644 /etc/cron.d/simple-cron # Create the log file to be able to run tail RUN touch /var/log/cron.log # Run the command on container startup CMD cron && tail -f /var/log/cron.log 更改为 FROM,然后我的cronjob停止工作。 FROM eventstore/eventstore基于eventstore,因此它似乎应继续有效。有没有人有任何想法?

1 个答案:

答案 0 :(得分:1)

假设:您希望在运行eventstore时在后台运行cron。

要了解的事情: 在dockerfile中,“CMD”部分作为参数附加到“ENTRYPOINT”部分。例如

ENTRYPOINT ["echo","running entrypoint"]
CMD ["echo","runnning cmd"]

将导致以下输出

running entrypoint echo running cmd

您的问题说明: 在您的Dockerfile中,cron作为CMD执行,当您的父图像是ubuntu:latest时,它可以正常工作,因为它没有定义任何ENTRYPOINT。而eventstore / eventstore定义了ENTRYPOINT,导致执行以下

/entrypoint.sh cron && tail -f /var/log/cron.log

这也可能导致eventstore本身的意外行为,具体取决于entrypoint.sh的定义方式。充其量它会忽略任何争论。

<强>解决方案: 定义脚本“custom-entrypoint.sh”以运行cron,然后运行eventstore入口点脚本。

#!/bin/bash
cron && /entrypoint.sh

然后定义您的Dockerfile以添加custom-entrypoint.sh并将其运行为 入口点。最终的Dockerfile应该看起来像

FROM eventstore/eventstore

# Install cron
RUN apt-get update
RUN apt-get install cron

# Add crontab file in the cron directory
ADD crontab /etc/cron.d/simple-cron

# Add shell script and grant execution rights
ADD script.sh /script.sh
RUN chmod +x /script.sh

# Add custom entrypoint shell script
ADD custom-entrypoint.sh /custom-entrypoint.sh
RUN chmod +x /custom-entrypoint.sh

# Give execution rights on the cron job
RUN chmod 0644 /etc/cron.d/simple-cron

# Create the log file to be able to run tail
RUN touch /var/log/cron.log

# Run the command on container startup
ENTRYPOINT ["/custom-entrypoint.sh"]