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

dwi*_*itz 25 ubuntu cron docker coreos

我试图让一个码头工人集装箱运行来管理我的cronjobs

我使用centOS 6.5 base在docker容器中运行一个非常简单的cron作为测试

* * * * * /bin/echo "it works!" >> test.log
Run Code Online (Sandbox Code Playgroud)

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

两个主机都运行docker 0.8

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

谢谢

dwi*_*itz 44

简短的回答

将此行添加到dockerfile

RUN sed -i '/session    required   pam_loginuid.so/c\#session    required   pam_loginuid.so' /etc/pam.d/crond
Run Code Online (Sandbox Code Playgroud)

答案很长

据我所知,问题与CoreOS和Unbutu之间的核心差异有关.这反过来导致了pam安全问题.

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

service rsyslog start
service crond restart
Run Code Online (Sandbox Code Playgroud)

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

FAILED to open PAM security session (Cannot make/remove an entry for the specified session)
Run Code Online (Sandbox Code Playgroud)

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

pam_loginuid(crond:session): set_loginuid failed
Run Code Online (Sandbox Code Playgroud)

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

#session    required   pam_loginuid.so
Run Code Online (Sandbox Code Playgroud)

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

  • 在我的情况下,我不得不在`/ etc/pam.d/cron`中对它进行评论.现在它完美无缺.非常感谢提示! (5认同)
  • 我的文件中有一个额外的空格,名称是“/etc/pam.d/cron”,而不是“/etc/pam.d/crond”。如果“sed”不能开箱即用,请不要感到惊讶!我的有这样的风格:```RUN sed -i '/session required pam_loginuid.so/c\#session required pam_loginuid.so' /etc/pam.d/cron``` (2认同)
  • 谢谢你的回答.使用sed的更好方法是`sed -e'/pam_loginuid.so/ s/^#*/#/' - i/etc/pam.d/crond` (2认同)