繁体   English   中英

在Docker容器中运行预定的cron作业的解决方案?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM