【问题标题】:How to configure supervisor not to kill jobs started by cron in docker container如何配置主管不杀死由 cron 在 docker 容器中启动的作业
【发布时间】:2022-02-05 10:30:01
【问题描述】:

我想运行 cron 并运行一些在 crontab 中设置的时间启动的脚本。我已经在我的 docker 容器上安装了 cron,并且想添加一些 crontab 行和 cron 从单独的脚本开始。这是我的配置片段

supervisord.conf

[program:cron]
command=/stats/run-crontabs.sh

/stats/run-crontabs.sh

#!/bin/bash

crontab -l | { cat; echo "11 1 * * * /stats/generate-year-rank.sh"; } | crontab -
crontab -l | { cat; echo "12 1 * * * /stats/generate-week-rank.sh"; } | crontab -
cron -f -L 15

当需要通过 cron 运行脚本时,我只能在容器日志中看到该错误

2022-01-29 01:12:01,920 INFO reaped unknown pid 691343

我想知道如何通过 cron 在 docker 容器上运行脚本。我需要主管吗?

编辑:正如@david-maze 建议的那样,我已经按照他的评论完成了它并将 cron 作为容器入口点运行,问题是一样的

感谢您的帮助

【问题讨论】:

  • 我会完全移除主管。将cron守护进程作为主容器进程作为前台进程运行;甚至不要在你的 Dockerfile 中安装 supervisord。
  • 但我需要主管在容器中运行其他进程
  • 关注 cron 进程本身:你能在单独的单进程容器中运行 cron,无需 supervisord 吗?如果您显示的脚本是从数据库中读取数据并将统计信息写回数据库,是否有任何东西会迫使它位于同一个容器中?
  • 是的,由于我们的项目需求,我想关闭一个容器中的所有逻辑。我知道,最好让数据库和脚本在单独的容器中读取和写入数据,但我必须遵守要求。这就是为什么我需要主管,并且我还想在该容器上作为第三个进程进行 cron 工作。
  • 我已经按照你的建议运行了它,问题是一样的。甚至没有显示此日志

标签: linux bash docker cron supervisord


【解决方案1】:

好的,我必须发布一个答案。我意识到脚本运行良好,但它将报告保存在系统根目录中,而不是我想要的目录中。

是因为缺少环境变量 更多你可以阅读这些主题, Where can I set environment variables that crontab will use?

但我已经解决了在“run-crontabs.sh”脚本开头添加该行的问题

crontab -l | { cat; echo "$(env)"; } | crontab -

【讨论】:

  • 实际上......不,您没有“必须”发布答案。你可能刚刚删除了这个问题。这样想——你真正的问题不是主管杀死工作。所以其他真正有这个问题的人可能会遇到你的问答(例如通过谷歌搜索),结果却发现你的解决方案完全不适用于他们……因为它是针对不同问题的解决方案。
猜你喜欢
  • 2019-09-09
  • 1970-01-01
  • 2016-08-29
  • 2016-09-24
相关资源
最近更新 更多