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

Cron task inside container from host

我正在从主机尝试在容器内执行 cron 任务,但没有成功。我在主机上添加以下行 crontab -e

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

但这不起作用。有趣的是,当我 运行 独立于 crontab 之外的命令时,它成功执行了。谁能解释一下我在这里遗漏了什么?

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


你的 crontab 命令有 2 个问题

TLDR;固定的 cron 表达式

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

%在crontab中有特殊意义

来自man -s 5 crontab

Percent-signs (%) in the command, unless escaped with backslash (\), will be changed into newline characters, and all data after the first % will be sent to the command as standard input.

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

cron 没有分配 tty

Cron 不分配 tty,而您在执行命令时尝试使用 tty(即 docker exec-t 选项)。因此,该命令将失败并显示错误 the input device is not a TTY

您不需要进行交互 (-i),也不需要为此命令分配 tty 来完成它的工作,所以您必须放弃这些选项才能从 cron 启动它。