Cron作业不起作用,直到我重新保存docker容器中的cron文件

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

这里是我的dockerfile的相关部分:

ADD mongocron /etc/cron.d/ RUN tr -d '\015' < /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\n" > /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 

这是重新保存之前的系统日志输出: 在这里输入图像说明

以下是一张照片: 重新保存后

重新启动cron本身并不能解决问题。 我有一种感觉,它与行结尾有关,所以这就是为什么你看到docker文件中使用换行符注释掉“回声”策略。 我也已经validation(保存之前)我的命令显示在我crontab -l的时候

过去我也在同样的问题上苦苦挣扎。

这里是一个工作的例子,从我们的DevBlog取得的野外testing。

 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,认为你不需要输出envvariables的部分。

 # 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文件,在构build映像时被复制。

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