在Docker上运行cron的问题在不同的主机上

时间:2014-02-21 06:00:37

标签: ubuntu cron docker coreos

我试图让一个docker容器运行来管理我的cronjobs

我使用centOS 6.5 base

在docker容器中运行一个非常简单的cron作为测试
* * * * * /bin/echo "it works!" >> test.log

如果容器在CoreOS主机上运行,​​它可以正常工作,但是如果我在ubuntu 13.10主机上运行容器,则不会执行cron。 (虽然主持人没有影响容器中运行的东西)

两台主机都在运行docker 0.8

我错过了一些明显的东西,或者这是一个错误?

感谢

4 个答案:

答案 0 :(得分:44)

简短回答

将此行添加到您的dockerfile

RUN sed -i '/session    required   pam_loginuid.so/c\#session    required   pam_loginuid.so' /etc/pam.d/crond

答案很长

据我所知,问题与CoreOS&的核心差异有关。 Unbutu。这反过来会导致pam安全问题。

认为我们首先需要打开cron的日志记录(因为我们在docker正常启动时没有执行)。跑

service rsyslog start
service crond restart

cron日志有此错误(位于/ var / log / cron)

FAILED to open PAM security session (Cannot make/remove an entry for the specified session)

所以我看了一下安全日志,它有这个错误(位于/ var / log / secure)

pam_loginuid(crond:session): set_loginuid failed

更多谷歌搜索,发现我需要修改我的pam cond配置(在这里找到/etc/pam.d/crond) 编辑此文件并注释掉以下行

#session    required   pam_loginuid.so

重启crond,一切都应该是好的

答案 1 :(得分:1)

基础Docker容器不启动像cron这样的服务 - 它们只启动你在ENTRYPOINT / CMD中指定的内容

一些'胖'容器使用诸如supervisord之类的东西来启动服务 - 但是在可能的情况下,将服务分成不同容器并使用容量容器共享数据更易于维护,或者--link

答案 2 :(得分:1)

@ dwitz的答案是正确的,但我必须稍微更改sed命令,使其在Docker容器中的Ubuntu 16.04上工作。

cat /etc/pam.d/cron |sed -e "s/required     pam_loginuid.so/optional     pam_loginuid.so/g" > /tmp/cron && mv /tmp/cron /etc/pam.d/cron 

答案 3 :(得分:0)

就我而言,我调试了cron:

$ apt-get install rsyslog
$ rsyslogd
$ service cron restart
$ tail -f /var/log/syslog

并在日志中发现NUMBER OF HARD LINKS > 1错误。

解决方案是将其放入entrypoint.sh

touch /etc/crontab /etc/cron.d/*

繁荣!