来自主机的容器内的 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 启动它。
我正在从主机尝试在容器内执行 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 启动它。