在我在docker容器中重新保存cron文件之前,Cron作业不起作用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在我在docker容器中重新保存cron文件之前,Cron作业不起作用相关的知识,希望对你有一定的参考价值。

我正在使用docker Mongo容器,并尝试通过bash脚本进行备份。该脚本自行执行,运行正常。我也可以在syslog中看到cron正在运行,但命令没有显示出来。如果我用crontab -e打开我的文件,然后保存并退出(:wq),然后重新启动cron,该作业运行正常。

这是我的dockerfile的相关部分:

ADD mongocron /etc/cron.d/
RUN tr -d '15' < /etc/cron.d/mongocron > /etc/cron.d/mongocron
#RUN touch /etc/cron.d/mongocron
#RUN echo "* * * * * /db_scripts/MongoDBBackup.sh >> /db_scripts/logs/backup.log
" > /etc/cron.d/mongocron
RUN crontab /etc/cron.d/mongocron
RUN chmod 0644 /etc/cron.d/mongocron

这是文件mongocron中的内容:

* * * * * /db_scripts/MongoDBBackup.sh >> /db_scripts/logs/backup.log

这是重新保存之前的syslog输出:enter image description here

这是一张照片:After resaving

单独重新启动cron并不能解决问题。我觉得它与行结尾有关,所以这就是为什么你在dockerfile中用换行符看到注释掉的“echo”策略。我还验证了(在保存之前)我的命令确实显示在我crontab -l时

答案

我过去一直在努力解决同样的问题。

这是一个工作实例,在野外测试,取自我们的DevBlog

FROM ubuntu:latest

ADD start.sh /bin/start.sh
RUN chmod +x /bin/start.sh

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

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

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

# start script
CMD /bin/bash /bin/start.sh

start.sh,认为你不需要导出env变量的部分..

# export all environment variables to use in cron
env | sed 's/^(.*)$/export 1/g' > /root/envs.sh
chmod +x /root/envs.sh

# Run the command on container startup
cron && tail -f /var/log/cron.log

构建映像时复制的Cron文件。

0 1 * * * root . /root/envs.sh;/bin/backup.sh >> /var/log/cron.log 2>&1
另一答案

我也遇到过这个问题,文件末尾缺少换行符是原因。 @opHASnoNAME的答案是正确的,但只有在编辑后才开始工作,新线就是原因。您的编辑器默认添加它。

以上是关于在我在docker容器中重新保存cron文件之前,Cron作业不起作用的主要内容,如果未能解决你的问题,请参考以下文章

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

通过 docker 日志查看 cron 输出,无需使用额外文件

在不同主机上的 Docker 中运行 cron 的问题

docker ubuntu cron -f 不工作

重启后重新启动docker容器。

清理docker环境:devicemapper