我们目前正在为运行PHP的NGINX (在Centos 7上)创建一个高可用性集群。大多数配置已经映射,并且应该在集群环境中很好地工作。
不幸的是,我们唯一不能理解的就是cron作业( cron作业将执行PHP代码)。据我所知,cron作业是在每个主机上单独执行的。这意味着我们要么:
考虑到解决方案3将如何帮助我们维护高可用性环境,这是首选的方法。不幸的是,我们对其中一些解决方案并不十分熟悉,因此,我寻求你们的专门知识,帮助我们找到适合我们需要的解决办法。我们对Linux机器并不十分熟悉(除了NGINX服务器之外,整个环境都是Windows ),而且我们对如何使用这些机器知之甚少(尽管到目前为止我们还能搞清楚这一点)。
在这方面的任何帮助都是非常感谢的。
我意识到这个问题已经被在此之前问到了,尽管它看起来已经过时了(2011年),并且已经创建了许多新的解决方案。
发布于 2019-03-15 15:42:50
RHEL/CentOS 7上的crond包括集群支持。它实际上是cronie,一个古老的vixie-cron的叉子。下面是手册页的详细信息:
在这个版本的Cron中,集群支持可以跨主机集群使用网络挂载的shared /var/spool/cron,并指定在任何时候只有一个主机应该在这个目录中运行crontab作业。这是通过使用-c选项启动Cron来完成的,并且/var/spool/cron/.cron.hostname文件只包含一行,它表示集群中哪个主机应该运行作业的主机名。如果这个文件不存在,或者它中的主机名与gethostname(2)返回的主机名不匹配,那么这个目录中的所有crontab文件都会被忽略。这对/etc/crontab文件中指定的cron作业或/etc/cron.d目录中的文件没有影响。这些文件总是被运行,并被认为是主机特定的.与其直接编辑/var/spool/cron/.cron.hostname,不如使用crontab(1)的-n选项来指定主机。您应该确保集群中的所有主机以及它们从其中挂载共享crontab目录的文件服务器都密切同步时钟,例如使用ntpd(8),否则结果将非常不可预测。
在实践中,这一做法要求:
crond标志开始-c的所有集群系统(将CRONDARGS=-c放在/etc/sysconfig/crond中);crontab -n来接管。请记住警告:此解决方案仅在/var/spool/cron中集群cron作业(即,使用crontab -e设置)。每个节点仍将在/etc/crontab或/etc/cron.d中运行各自的作业。
发布于 2017-07-29 08:02:12
为什么不选择(2),但它在执行时创建了一个标志。cron作业将在所有机器上启动,局部时间变化很小,这意味着其中一台机器首先创建标志;其他机器则看到设置并退出标志,而第一台机器运行完成。
您将需要注意标记设置/检查的原子性(NFS在这里也是一个选项,其中包含一个锁文件),尽管为了将其保持在最小值,其中之一可能也有一些值。
发布于 2017-07-28 20:55:08
我使用詹金斯来管理大约140个预定脚本。
Jenkins并不是作为cron的替代品而成为服务器的,它是用于持续集成的,但是您可以与他一起管理几乎所有的东西。
以下是一些成功的人(就像我一样)把工作从cron转移到Jenkins
这里是Jenkins和cron的一个很好的比较
https://serverfault.com/questions/865741
复制相似问题