Docker:Cronjob无法正常工作

时间:2014-07-24 21:07:10

标签: bash cron fedora docker

我正在尝试在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

有人遇到过这个问题吗?如果是的话,请你指点一下吗?

提前感谢。

2 个答案:

答案 0 :(得分:8)

LXC容器不是虚拟机。你需要在前台明确地运行cron守护进程。最好还是从Supervisorrunit等程序中运行cron。

参考:Docker documentation

  

传统上,Docker容器在运行时会运行单个进程   已启动,例如Apache守护程序或SSH服务器守护程序。经常   虽然您想在容器中运行多个进程。有   通过使用简单的Bash,您可以通过多种方式实现这一目标   script作为容器的CMD指令安装的值   流程管理工具。

     

在这个例子中,我们将使用流程管理   工具,主管,管理我们容器中的多个进程。运用   主管允许我们更好地控制,管理和重启   我们想要运行的流程。为了证明这一点,我们将安装   并管理SSH守护程序和Apache守护程序。

答案 1 :(得分:3)

你可以这样做:

  

ENTRYPOINT cron -f

虽然记住你只能有一个ENTRYPOINT。

来自docs

  

Dockerfile中只能有一个ENTRYPOINT。如果你有更多   比一个ENTRYPOINT,只有Dockerfile中的最后一个   有效果。

     

ENTRYPOINT可帮助您配置可以运行的容器   可执行文件。也就是说,当你指定一个ENTRYPOINT,那么整个   容器就像只是那个可执行文件一样运行。