Docker:Cronjob 不工作
Posted
技术标签:
【中文标题】Docker:Cronjob 不工作【英文标题】:Docker: Cronjob is not working 【发布时间】:2014-09-16 14:45:16 【问题描述】:我正在尝试在 Docker 容器上运行 cron 作业。我有一个正在运行的容器(Fedora 20)。 我还在容器中安装了 cron 包并显式运行 cron 守护程序。 我还检查了 cron.deny 文件它是空的,并且 /etc/ 目录下没有名为 cron.allow 的文件。
Whenever I tried to set the cronjob by using crontab -e or trying to list the cron job using
crontab -l I am getting following error.
bash-4.2# crontab -l
You (root) are not allowed to access to (crontab) because of pam configuration.
bash-4.2# crontab -e
You (root) are not allowed to access to (crontab) because of pam configuration.
我还检查了 /etc/pam.d/crond 文件,它具有以下条目
bash-4.2# vi /etc/pam.d/crond
#
# The PAM configuration file for the cron daemon
#
#
# No PAM authentication called, auth modules not needed
account required pam_access.so
account include password-auth
session required pam_loginuid.so
session include password-auth
auth include password-auth
有人遇到过这个问题吗?如果可以,请您给我一些建议吗?
提前致谢。
【问题讨论】:
@MarkO'Connor 移动你的 cmets 来回答 【参考方案1】:LXC 容器不是虚拟机。您需要在前台显式运行 cron 守护程序。最好还是从 Supervisor 或 runit 之类的程序运行 cron。
参考:Docker documentation
传统上,Docker 容器在运行时运行单个进程 启动,例如 Apache 守护程序或 SSH 服务器守护程序。经常 尽管您想在一个容器中运行多个进程。有 您可以通过多种方式实现这一目标,包括使用简单的 Bash 脚本作为容器的 CMD 指令的值来安装 流程管理工具。
在这个例子中,我们将使用流程管理 工具,Supervisor,用于管理我们容器中的多个进程。使用 Supervisor 允许我们更好地控制、管理和重启 我们要运行的进程。为了证明这一点,我们将安装 并管理 SSH 守护程序和 Apache 守护程序。
【讨论】:
感谢马克的回复。在后台运行 cron 守护进程会不起作用吗?如果我需要作为 FOREGROUND 运行,那么我需要使用多个屏幕还是可能从其他终端附加容器。 @GautamGoswami 我扩大了我的答案。 LXC 容器通常运行单个进程,要运行更多,您需要某种形式的进程管理。容器不执行传统的操作系统活动,例如引导后台服务。它不是虚拟机。 感谢马克的帮助。 嗨,马克,我有一个愚蠢的疑问,我已经在后台运行 apache 和 mysql 守护程序并且它工作正常。同样,为什么我不能运行 cron 守护进程?提前致谢。 @GautamGoswami ***.com/questions/20545554/… 或 programster.blogspot.ie/2014/01/…【参考方案2】:你可以这样做:
ENTRYPOINT cron -f
尽管记住你只能有一个入口点。
来自docs:
一个 Dockerfile 中只能有一个 ENTRYPOINT。如果你有更多 比一个 ENTRYPOINT,那么只有 Dockerfile 中的最后一个 有效果。
ENTRYPOINT 可帮助您配置可以运行的容器 一个可执行文件。也就是说,当您指定一个 ENTRYPOINT 时,整个 容器就像它只是那个可执行文件一样运行。
【讨论】:
以上是关于Docker:Cronjob 不工作的主要内容,如果未能解决你的问题,请参考以下文章
Docker&Kubernetes ❀ Kubernetes集群Pod控制器 - Cronjob(CJ)
Docker&Kubernetes ❀ Kubernetes集群Pod控制器 - Cronjob(CJ)