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

Linux 在Docker容器中运行定时cron作业的解决方案?,linux,docker,cron,scheduled-tasks,crontab,Linux,Docker,Cron,Scheduled Tasks,Crontab,我有一个Docker容器,其中安装了Python工具,包括Luigi管道接口。我想运行一个shell脚本,每周使用cron启动我的Luigi管道 我尝试过让cron在Docker容器中工作。我不能让crontab-e文件运行 在我的档案中,我有: 0**Sun/data/myscript.sh 接着是一条新的路线。Cron正在后台运行-ps aux|grep Cron显示/usr/sbin/Cron正在运行。此外,在我的/var/log/syslog文件中,我有: /USR/SBIN/CRON[

我有一个Docker容器,其中安装了Python工具,包括Luigi管道接口。我想运行一个shell脚本,每周使用cron启动我的Luigi管道

我尝试过让cron在Docker容器中工作。我不能让crontab-e文件运行

在我的档案中,我有:

0**Sun/data/myscript.sh

接着是一条新的路线。Cron正在后台运行-
ps aux|grep Cron
显示
/usr/sbin/Cron
正在运行。此外,在我的
/var/log/syslog
文件中,我有:

/USR/SBIN/CRON[2037]:(root)CMD(/data/myscript.sh)

我也尝试过使用
0**Sun/root/.bashrc;sh/data/myscript.sh

但是,我的脚本没有运行(当我使用
bash myscript.sh
手动运行脚本时,我得到了预期的结果)


建议?

计划任务不会在普通容器内运行,因为没有正在运行的计划程序。唯一的活动任务是您选择通过CMD关键字或入口点运行的任务

为了执行调度任务,更谨慎的做法是使用host scheduler和docker exec命令:

docker exec <container> <command>
docker exec <container> /data/myscript.sh
docker exec
docker exec/data/myscript.sh
因此,您的主机上会有一个cron,例如:

(Crontab样式) 0****根docker exec mycontainer/data/myscript.sh


如果您有一个集群,那么您必须首先查询集群以定位容器,或者甚至让脚本为您执行此操作

一个容器只能运行一个主进程。您需要将
crond
作为容器的主进程运行,或者确保
crond
与主进程一起运行。这种情况会破坏容器的契约/点,但有时这样设置更容易。说明如下:

我的Dockerfile具有以下
ENTYPOINT

ENTRYPOINT ["/startup.sh"]
然后在
startup.sh
中,我做了几件事来启动容器,但最重要的是,在执行最后一个命令之前,我有:

crond
exec start_my_service

crond
启动执行cron的守护进程,
start\u my\u service
然后成为我的容器的主要进程。

作为后续,在swarm/kubernetes环境中,我发现编写始终运行但仅在指定时间执行操作的守护进程更有用。这允许任务在环境中相当干净地分布。