作者:蔡士奇佳霖哲维 | 来源:互联网 | 2023-08-31 13:29
篇首语:本文由编程笔记#小编为大家整理,主要介绍了在我在docker容器中重新保存cron文件之前,Cron作业不起作用相关的知识,希望对你有一定的参考价值。
篇首语:本文由编程笔记#小编为大家整理,主要介绍了在我在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
#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输出:
这是一张照片:
单独重新启动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的答案是正确的,但只有在编辑后才开始工作,新线就是原因。您的编辑器默认添加它。