如何在Docker内每5分钟执行一次cron作业

0md85ypi  于 2023-02-07  发布在  Docker
关注(0)|答案(3)|浏览(148)

我想在Docker容器中每分钟为www.example.com执行一次cron作业feeds.sh,每5分钟为reminder.sh执行一次cron作业。它可以每分钟为feeds.sh运行一次。但是对于reminder.sh,它不能每5分钟运行一次,因为它一直在Docker容器中抛出错误/bin/ash: */5: not found
下面的代码如下所示:

FROM alpine:latest

# Install curlt 
RUN apk add --no-cache curl

# Copy Scripts to Docker Image
COPY reminders.sh /usr/local/bin/reminders.sh
COPY feeds.sh /usr/local/bin/feeds.sh

# Add the cron job
RUN echo ' *  *  *  *  * /usr/local/bin/feeds.sh &&  */5  *  *  *  *    /usr/local/bin/reminders.sh' > /etc/crontabs/root

# Run crond  -f for Foreground 
CMD ["/usr/sbin/crond", "-f"]
cwdobuhd

cwdobuhd1#

将其添加到单独的行中。
当您将&&与cron一起使用时,它期望为相同的cron频率添加多个cron作业。
例如
0 * * * * a && b
因此,为什么它说“*/5未找到”,因为这是上面的b-它认为这是一个要运行的cron脚本。
将您的 */5 * * * * 脚本添加到其自己命令的单独一行中。

6ss1mwsb

6ss1mwsb2#

更新Docker文件,以每分钟和每5分钟运行一次

FROM alpine:latest

# Install curlt 
RUN apk add --no-cache curl

# Copy Scripts to Docker Image
COPY reminders.sh /usr/local/bin/reminders.sh
COPY feeds.sh /usr/local/bin/feeds.sh

# Add the cron job

RUN echo ' *  *  *  *  * /usr/local/bin/feeds.sh' >> /etc/crontabs/root
RUN echo ' */5  *  *  *  * /usr/local/bin/reminders.sh' >> /etc/crontabs/root

# Run crond  -f for Foreground 
CMD ["/usr/sbin/crond", "-f"]
ryevplcw

ryevplcw3#

docker-compose.yml

services:
  supercronic:
    build: .
    command: supercronic crontab

Dockerfile

FROM alpine:3.17
RUN set -x \
    && apk add --no-cache supercronic shadow \
    && useradd -m app
USER app
COPY crontab .

crontab
一个二个一个一个
更多信息在我的other answer

相关问题