sim*_*Pod 6 cron containers scheduler docker
目前,我有一个应用程序在一台服务器上运行。设置了一个 crontab,以便根据指定的规则,在特定时间运行一些任务。
现在,我正在考虑将我的应用程序迁移到 Docker 容器中,以便我能够独立运行我的应用程序的多个实例。我想知道如何做是如何跨多个 docker 容器安排任务。
假设我有一个 php 命令,每小时通过 API 从 3rd 方应用程序获取新数据。目前,我会使用 cron 来安排它,如下所示:0 */1 * * * php /some/path/index.php mycommand
。可以有多个以不同频率启动的类似命令。
我不能简单地将 crontab 打包到我的 docker 镜像中,因为当有 5 个容器运行时,该命令将启动 5 次。我只想根据正在运行的容器计数独立启动它一次。
实现这一目标的理想解决方案是什么?
您可以使用锁定机制,例如 redis。基本上它会像这样工作。
脚本醒来后,它做的第一件事就是尝试获取锁。如果它获得了锁,则继续前进,如果其他东西获得了锁,则退出。执行脚本执行的操作,然后释放锁。
由于一次只有一个脚本可以获得锁,因此它只允许该脚本运行一次。
重要的是,当脚本完成时移除锁,并且还要给锁添加一个 TTL,这样如果脚本在释放锁之前死掉,那么锁会在 TTL 过期后自动打开。
这里有一些关于如何使用 Redis 作为分布式锁的文档。https://redis.io/topics/distlock
归档时间: |
|
查看次数: |
2446 次 |
最近记录: |