【问题标题】:Cronjobs in Docker container how get them running?Docker 容器中的 Cronjobs 如何让它们运行?
【发布时间】:2015-10-17 16:47:25
【问题描述】:

我的 debian docker 容器中有一些 cronjobs。它们没有自动启动,为什么?

我必须做一些变通办法吗?

【问题讨论】:

  • 你在容器中运行 cron 吗?
  • 是的,我这样做了:/etc/init.d/cron start
  • 没有 docker 文件。我已经通过 ssh 连接到服务器并运行 /etc/init.d/cron start...

标签: cron docker debian crontab


【解决方案1】:

首先在 docker 容器中运行 cron 守护进程。登录容器时,在 shell 中运行以下命令:

cron

然后作业将定期启动。

【讨论】:

  • 我收到这个错误:cron: can't lock /var/run/crond.pid, otherpid 可能是 14782: Resource暂时不可用
  • 这意味着 cron 已经在运行。所以我的解决方案不会帮助你。你确定工作没有开始吗?你能试试像*/1 * * * * echo "testmessage" >> /tmp/crontestfile这样简单的东西吗?
  • 是的,我确定我应该收到邮件,并且在我的日志文件中应该保留一些东西
【解决方案2】:

如果你在docker中运行容器,你可以在docker主机上添加cron任务来执行docker容器中的命令。

例如,要每 5 分钟在您的容器中运行一次“压力”应用程序,您可以将以下内容(当然要替换您的容器 ID)添加到您的 crontab:

*/5 * * * * docker exec c78ddbed4ad9 /bin/sh -c 'stress -d 1 --hdd-bytes 64M --cpu 1 --io 2 --vm 2 --vm-bytes 64M --timeout 60s' >> /tmp/cronstress.log 2>&1

我在 docker 主机上以 root 用户身份运行它。

或者只运行 cron:

root@dockerhost:cron

【讨论】:

  • 好的,但是这些 cronjobs 是从 rails 应用程序生成的,难道没有办法在容器中运行它们吗?
  • 或者只运行 cron:root@dockerhost:cron
  • 来自主机?我该如何设置?
  • cron 语句中的用户丢失。代码应该是: */5 * * * * 用户名 docker exec c78ddbed4ad9 /bin/sh ...等
【解决方案3】:

你是从哪里开始 cron 的?在 Dockerfile 中?在RUN 中执行此操作将无法正常工作,因为该进程不会继续运行。你需要这样做,例如通过CMD。一个更好的主意是使用suzpervisord

【讨论】:

  • 没有 docker 文件。我已经通过 ssh 连接到服务器并运行 /etc/init.d/cron start
【解决方案4】:

cronjob 没有在 docker 容器中启动 logrotation。 我的 cronjob 如下所示:

30 9 * * * root /usr/sbin/logrotate /etc/logrotate.d/apache2

我还在 docker 文件中添加了下面的脚本作为 ENTRYPOINT 来启动 cron。

!/bin/bash

/etc/init.d/cron 启动

【讨论】:

  • 这是一个答案还是您在分享一个观察结果?
猜你喜欢
  • 1970-01-01
  • 2021-08-22
  • 2015-06-06
  • 2020-08-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多