Linux 如何在docker容器中运行cron作业

Linux 如何在docker容器中运行cron作业,linux,docker,cron,Linux,Docker,Cron,我试图在docker容器中运行cron作业,但没有任何效果。 我的容器只有cron.daily和cron.weekly文件。 crontab、cron.d、cron.hourly在我的容器中不存在。 crontab-e也不工作。 我的容器运行于/bin/bash以下是我运行cron容器的方式 Dockerfile: FROM alpine:3.3 ADD crontab.txt /crontab.txt ADD script.sh /script.sh COPY entry.sh /entry

我试图在docker容器中运行cron作业,但没有任何效果。
我的容器只有
cron.daily
cron.weekly
文件。
crontab、cron.d、cron.hourly
在我的容器中不存在。
crontab-e
也不工作。

我的容器运行于
/bin/bash

以下是我运行cron容器的方式

Dockerfile:

FROM alpine:3.3

ADD crontab.txt /crontab.txt
ADD script.sh /script.sh
COPY entry.sh /entry.sh
RUN chmod 755 /script.sh /entry.sh
RUN /usr/bin/crontab /crontab.txt

CMD ["/entry.sh"]
crontab.txt

*/30 * * * * /script.sh >> /var/log/script.log
entry.sh

#!/bin/sh

# start cron
/usr/sbin/crond -f -l 8
#!/bin/sh

# code goes here.
echo "This is a script, run by cron!"
script.sh

#!/bin/sh

# start cron
/usr/sbin/crond -f -l 8
#!/bin/sh

# code goes here.
echo "This is a script, run by cron!"
像这样建造

docker build -t mycron .
像这样跑

docker run -d mycron

添加您自己的脚本并编辑crontab.txt,然后构建映像并运行。因为它是基于阿尔卑斯山的,所以图像非常小。

crond在阿尔卑斯山上使用效果很好

RUN apk add --no-cache tini

ENTRYPOINT ["/sbin/tini", "--"]
CMD ["/usr/sbin/crond", "-f"]
但不应作为容器主进程(PID 1)运行,因为僵尸收割问题和信号处理问题。有关详细信息,请参见和。

Docker文件示例:

FROM alpine

# Copy script which should be run
COPY ./myawesomescript /usr/local/bin/myawesomescript
# Run the cron every minute
RUN echo '*  *  *  *  *    /usr/local/bin/myawesomescript' > /etc/crontabs/root

CMD ['crond', '-l 2', '-f']

为什么不应该作为PID1运行?这很好。我遇到的一个问题是docker run之后。。。我无法使用ctrl-c停止容器的运行?即使在我关闭码头后,当我做docker ps时,我仍然可以看到集装箱仍在上升。有人有同样的问题吗?@ztech您是否尝试过“docker stop”?请添加
运行apk add--update apk cron&&rm-rf/var/cache/apk/*
,以获得完整示例的答案。有很多种方法可以将cron添加到上面列出的alpine中,这一种与您的示例一起使用。嗨,为什么有2个add和1个COPY?根据我所读的内容,3个COPY或3个add都可以(在本例中)。我说得对吗?
crond-f-l8
,8是什么意思?根据曼的说法,日志级别是大写的
L