gpt4 book ai didi

bash - 在Docker容器中将bash脚本作为cron作业运行

转载 作者:行者123 更新时间:2023-12-02 19:45:42 25 4
gpt4 key购买 nike

我想在Docker容器中定期运行bash脚本(我的工作基于以下答案:https://stackoverflow.com/a/37458519/6240756)
这是我的脚本hello.sh:


#!/bin/sh
echo "Hello world" >> /var/log/cron.log 2>&1
这是cron文件 hello-cron:
# m h  dom mon dow   command
* * * * * /app/hello.sh
# Empty line
这是我的Dockerfile:
FROM ubuntu:20.04

RUN apt-get update && apt-get install -y cron

# Add backup script
COPY hello.sh /app/
RUN chmod +x /app/hello.sh

# Configure the cron
# Copy file to the cron.d directory
COPY hello-cron /etc/cron.d/hello-cron

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

# Apply cron job
RUN crontab /etc/cron.d/hello-cron

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

# Start the cron
CMD cron && tail -f /var/log/cron.log
我构建并运行容器,但是什么也没有发生。我应该每分钟看到一次“Hello world”。
如果我直接通过 echo "Hello world" >> /var/log/cron.log 2>&1替换对cron文件中脚本的调用,那么它每分钟都会看到“Hello world”
我究竟做错了什么?
编辑
和Docker命令:
docker build -t hello-cron .
docker run -t -i hello-cron

最佳答案

关于您的具体问题
问题是您要使用-t -i启动docker,而您想要的是后台执行并进行交互检查。
尝试:

docker run -d --name mycontainer hello-cron 
docker logs -f mycontainer
最佳实践
如果要定期执行某项操作,请考虑是否应在运行状况检查定义中进行设置,您可以在其中设置时间段和其他变量。
其次,请注意,您的cron.log未挂载,因此,如果Docker重新启动,您将丢失此信息。

关于bash - 在Docker容器中将bash脚本作为cron作业运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63412332/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com