向多台服务器同时添加新的 cron 作业或者在多台服务器上自动创建 cron 作业的最佳方法是什么。
我计划使用 rysnc 将 bash 脚本推送到多个服务器,但我需要添加一个运行该脚本的 cron 作业。
答案1
大多数现代 Linux 发行版都支持该/etc/cron.d
框架,它允许采用模块化方法将 cron“片段”推送到多个服务器。这是一个特殊的目录,每分钟扫描一次以查找可用的作业。您可以将小型 cron 文件放入目录中。这是一种比编辑中央或每个用户的 crontab 更优雅的方法。
看:/etc/cron.d 和 /var/spool/cron 有什么区别?有关使用该框架所需的略有不同的格式的更多信息。
我会创建作业/cron 文件并将它们 scp 到相关服务器。我认为对于这种规模的东西,Puppet 或完整的配置管理套件是多余的。
答案2
您还可以考虑 Ansible,它有 cron 模块。
答案3
Puppet 有一个 cron 提供商。(可能还有 CFEngine 和 Chef 以及其他一些选择)
它还具有一个巧妙的技巧,您可以使用主机名的哈希值来错开 cron 作业的执行,如下所示:
cron { "run-myscript":
command => "/path/to/myscript.sh",
minute => inline_template("<%= hostname.hash.abs % 60 %>"),
}
如果您拥有超过几十台服务器或者您认为您的服务器可能会增长到这个规模,那么现在开始配置管理将是值得的。
对于快速而粗略的解决方案,clusterssh可能会奏效。解决这类问题的长期办法是集体,功能,织物或者卡皮斯特拉诺。
答案4
应该在概念验证中尝试,但我认为它可能适用于共享/var/spool/cron
目录(例如 nfs 共享)。你试过了吗?我想说这是最简单的方法