【发布时间】:2015-10-17 04:20:57
【问题描述】:
我有一个 django 管理命令作为 cron 作业运行,它设置在多个主机上同时运行。确保 cron 作业在任何时候仅在一台主机上运行的最佳方法是什么?一种方法是使用数据库锁作为 cron 作业更新 MySQL 数据库,但我确信有更好的(django 或 pythonic)方法来实现我正在寻找的东西
【问题讨论】:
-
一种方法是使用支持集群的 cron 版本,并在 cron 集群中的所有主机上共享 /var/spool/cron。有关更多信息,请参阅 man7.org/linux/man-pages/man8/cron.8.html#CLUSTERING_SUPPORT 和 man7.org/linux/man-pages/man1/crontab.1.html。如果 cron 作业不经常运行,则可以单独配置 cronjob 以在主机上错开时间运行。
-
@TrisNefzger:您的解决方案可以用于跨不同集群的主机吗?
-
是的,只要相同的 /var/spool/cron 可以在所有主机上共享,因为这就是使它们成为 cron 集群的原因。从使用 ssh 远程运行它们的单个主机启动 cron 作业可能更简单。 Cronlock 是另一个使用 redis 跨主机进行 cron 同步的工具,请参阅github.com/kvz/cronlock。谷歌也在 2009 年出于同样的目的开发了 rcron,请参阅code.google.com/p/rcron 和stackoverflow.com/questions/23153379/… 了解更多信息。
标签: python database cron crontab distributed