crontab 不适用于 Centos Docker 容器

crontab not working on Centos Docker container

我正在尝试通过 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:我查看了大量相关的 QnA,但其中 none 有所帮助。

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

在次优的谷歌搜索和实验中浪费了一天之后,这个难题的答案是注释掉文件中的以下行/etc/pam.d/crond(然后运行 service crond restart):

session required pam_loginuid.so

这是因为某些 Docker-Centos 安全问题。我没有详细说明为什么会这样。 (查看 this 了解详情。)

此外,解决这个问题让我意识到一些可能有用的问题:

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

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

  • 你的脚本和日志文件应该有合适的 write/execute 权限

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

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

  • 同时检查 /etc/cron.allow and /etc/cron.deny 个文件以验证谁 可以 add/edit 计划任务

你的一天能投入到更富有成效的追求中,陌生人。

我推荐 运行 主机下的 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