crontab无法使用Centos Docker容器

时间:2015-12-28 13:37:01

标签: python docker cron centos crontab

我正在尝试通过Centos docker容器中的 Crontab运行一些python脚本,但我尝试过的任何工作都没有。

首先我安装了cron:

yum install vixie-cron

然后我将其作为服务运行:

/etc/init.d/crond start

(我也开始/sbin/service crond开始,因为对相关问题的一些答案建议如此)

ps aux | grep cron显示:

root     16917  0.0  0.0  23288  1252 ?        Ss   18:53   0:00 crond                                                                                
root     16929  0.0  0.0   9720   836 pts/0    S+   18:55   0:00 grep cron 

crontab -l看起来像:

0 17 1 * * /root/proj/env/bin/python /root/proj/files/frontend/file1.py > /var/log/cron.log                                                      

0 9 4 * * /root/proj/env/bin/python /root/proj/files/frontend/file2.py > /var/log/cron.log                                                      

0 17 15 * * /root/proj/env/bin/python /root/proj/files/frontend/file3.py > /var/log/cron.log                                                     

0 9 18 * * /root/proj/env/bin/python /root/proj/files/frontend/file4.py > /var/log/cron.log                                                     

0 14 * * * /root/proj/env/bin/python /root/proj/files/frontend/file5.py > /var/log/cron.log                                               

0 8 * * * /root/proj/env/bin/python /root/proj/files/frontend/file6.py > /var/log/cron.log                                                  

* * * * * echo 'Check!!' > /var/log/cron.log 

所有python脚本和cron.log文件都有权限777 crontab中的最后一个条目只是检查是否有任何内容写入日志文件......但是没有任何内容写在那里..

知道如何解决这个问题吗?

PS:我查看了大量相关的QnAs,但没有一个帮助过。

有些答案建议写信给/etc/crontab ..所以我甚至在那里输入了* * * * * root echo 'Blah' > var/log/cron.log ..但是没有效果:(

2 个答案:

答案 0 :(得分:5)

在用Google Googling和实验进行了一天的浪费之后,这个难题的答案是评论文件/etc/pam.d/crond中的以下行(然后运行service crond restart):

session required pam_loginuid.so

这是因为Docker-Centos的一些安全问题。我没有进一步了解其原因。 (查看this了解详情。)

此外,对此进行故障排除让我意识到可能有用的一些问题:

  • 检查您是否将crond作为服务运行(如果没有,请使用 /etc/init.d/crond start

  • crontab中的每一行都应该跟一个换行符

  • 您的脚本和日志文件应该具有合适的写入/执行 权限

  • crontab文件不应该有奇怪的Windows环境字符 (如^ M)

  • 在极少数情况下,crond可能与您的时区有不同的时区 系统

  • 同时检查/etc/cron.allow and /etc/cron.deny个文件以验证是谁 可以添加/编辑cron作业

可能你的日投入更多富有成效的追求,陌生人。

答案 1 :(得分:0)

我建议在主机下运行cron并在容器内运行命令

示例:

0 17 1 * * /usr/bin/docker exec container_name /root/proj/env/bin/python /root/proj/files/frontend/file1.py > /var/log/cron.log