[英]Solution for running scheduled cron job within a Docker container?
我有一个Docker容器,我安装了我的Python工具,包括我的Luigi管道接口。 我想运行一个shell脚本,它使用cron每周启动我的Luigi管道。
我尝试过高低,让cron在Docker容器中工作。 在我的生活中,我不能让我的crontab -e文件运行。
在我的档案中,我有:
0 0 * * Sun /data/myscript.sh
接着是一条新线。 Cron正在后台运行 - ps aux | grep cron
ps aux | grep cron
显示/usr/sbin/cron
正在运行。 此外,在我的/var/log/syslog
文件中,我有:
/USR/SBIN/CRON[2037]: (root) CMD (/data/myscript.sh)
我也试过使用0 0 * * Sun . /root/.bashrc ; sh /data/myscript.sh
0 0 * * Sun . /root/.bashrc ; sh /data/myscript.sh
但是,我的脚本没有运行(当我使用bash myscript.sh
手动运行我的脚本时,我得到了预期的结果)。
建议?
由于没有调度程序正在运行,因此计划任务不会在普通容器内运行。 唯一的活动任务是您选择通过CMD关键字或Entrypoint运行的任务。
为了执行计划任务,使用主机调度程序和docker exec命令更为谨慎:
docker exec <container> <command>
docker exec <container> /data/myscript.sh
所以你最终会在你的主机上找到一个cron:
(Crontab样式)0 * * * * root docker exec mycontainer /data/myscript.sh
如果您有一个群集,则必须首先查询群集以找到容器,或者甚至让脚本为您执行此操作。
容器仅用于一个运行主进程。 您需要运行crond
作为容器的主要进程,或者确保crond
与主进程一起运行。 这种打破容器的合同/点,但有时这样设置起来更容易。 说明如下:
我的Dockerfile具有以下ENTYPOINT
:
ENTRYPOINT ["/startup.sh"]
然后在startup.sh
我做了一些事情来启动容器,但最重要的是在执行最后一个命令之前,我有这个:
crond
exec start_my_service
crond
启动执行crons的守护进程,然后start_my_service
成为我的容器的主要进程。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.