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