Docker 来自主机的容器内的Cron任务

Docker 来自主机的容器内的Cron任务,docker,cron,containers,cron-task,Docker,Cron,Containers,Cron Task,我正在主机的容器中尝试cron任务,但运气不好。在主机上,我在crontab-e * * * * * docker exec -it sample_container bash -c 'touch /selected/directory/temp$(date +%H-%M)' 但这是行不通的。有趣的是,当我在crontab之外独立运行该命令时,它正在成功执行。有人能解释一下我在这里遗漏了什么吗?注意:在使用cron调试此类问题时,您应该查找本地系统邮件中的错误,或者通过添加MAILTO将这些错

我正在主机的容器中尝试cron任务,但运气不好。在主机上,我在
crontab-e

* * * * * docker exec -it sample_container bash -c 'touch /selected/directory/temp$(date +%H-%M)'

但这是行不通的。有趣的是,当我在crontab之外独立运行该命令时,它正在成功执行。有人能解释一下我在这里遗漏了什么吗?

注意:在使用cron调试此类问题时,您应该查找本地系统邮件中的错误,或者通过添加
MAILTO将这些错误重定向到实际邮件中=yourmail@yourdomain.com
在crontab文件的顶部


crontab命令有两个问题

太长,读不下去了固定cron表达式 %在crontab中有特殊的含义 从
man-s 5 crontab

命令中的百分号(
%
),除非用反斜杠(
\
)转义, 将更改为换行符,并在 首先,
%
将作为标准输入发送到命令

因此,您需要在日期格式字符串中转义那些
%
符号

Cron不分配tty Cron不分配tty,而您在执行命令时尝试使用tty(即
-t
选项到
docker exec
)。因此,命令将失败,出现错误
输入设备不是TTY


您不需要进入交互式(
-i
),也不需要为此命令分配tty来执行其工作,因此您必须删除这些选项才能从cron启动该命令。

Spot on on!感谢您很好地解释了这个问题,并提供了一个简短而快速的解决方案。
* * * * * docker exec sample_container bash -c 'touch /selected/directory/temp$(date +\%H-\%M)'