【问题标题】:Cron task inside container from host来自主机的容器内的 Cron 任务
【发布时间】:2020-04-28 17:02:07
【问题描述】:

我正在从主机尝试容器内的 cron 任务,但没有运气。从主机我在crontab -e添加以下行@

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

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

【问题讨论】:

    标签: docker cron containers cron-task


    【解决方案1】:

    注意:使用 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

    命令中的百分号 (%),除非用反斜杠 (\) 转义, 会变成换行符,后面的所有数据 第一个% 将作为标准输入发送到命令。

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

    Cron 没有分配 tty

    当您在执行命令时尝试使用一个 tty 时,Cron 没有分配一个 tty(即 docker exec-t 选项)。因此,该命令将失败并出现错误 the input device is not a TTY

    您无需进行交互 (-i) 也无需为此命令分配 tty 即可完成其工作,因此您必须放弃这些选项才能从 cron 启动它。

    【讨论】:

    • 准确!感谢您很好地解释了问题并提供了简短而快速的解决方案。
    猜你喜欢
    • 1970-01-01
    • 2018-12-15
    • 2017-05-01
    • 2017-08-28
    • 1970-01-01
    • 2019-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多