我正在使用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并不能解决问题。我觉得它与行结尾有关,所以这就是为什么你在dockerfile中用换行符看到注释掉的“echo”策略。我还验证了(在保存之前)我的命令确实显示在我crontab -l </ p>时
答案 0 :(得分:0)
我过去一直在努力解决同样的问题。
以下是一个工作示例,在我们的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
答案 1 :(得分:0)
我也遇到了这个问题,原因是文件末尾缺少换行符。 @opHASnoNAME的答案是正确的,但是当它仅在编辑后才开始工作时,是换行的原因。您的编辑器默认情况下只会添加它。