Cron作业没有';在docker容器中重新保存cron文件之前,我无法工作

Cron作业没有';在docker容器中重新保存cron文件之前,我无法工作,docker,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 #

我正在使用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
这是重新保存前的系统日志输出:

下面是一张照片:


单独重新启动cron并不能修复它。我有一种感觉,它与行尾有关,所以这就是为什么你会在dockerfile中看到注释掉的带有新行的“echo”策略。我还验证了(在保存之前)我的命令在crontab-l中是否显示,我过去也遇到过同样的问题

下面是一个工作示例,在野外测试,取自我们的

对于start.sh,我认为您不需要导出环境变量的部件

# 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启动后使用“crontab-l | crontab-”触发cron工作,这对于生产来说当然是不可接受的。
# 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
0 1 * * * root . /root/envs.sh;/bin/backup.sh >> /var/log/cron.log 2>&1