在我的工作中,我们大量使用 cron 来自动化许多系统管理任务,从备份到报告生成。问题在于,我们的 50 多个 cron 作业系统的复杂性开始因自身的重量而崩溃。让我描述一下我们的设置:
- 约 15 名开发人员,其中一些负责通过他们的个人 crontab 运行的 cron 作业
- 30 多台机器,其中一些正在运行 cron 作业,有时由几个人运行
- 许多 cron 作业没有被记录,他们所有的 stdout 和 stderr 都被传送到 /dev/null (让我懊恼)
- 一些 cron 作业太嘈杂,吐出大量文本,使来自 cron 的电子邮件难以筛选
- 大多数 cron 作业(如果它们受到监控)会转到群组电子邮件别名,因此许多人看到与他们无关的消息并习惯于忽略它们
- 经常 cron 作业失败,我们没有及时注意到
- 我们的备份系统正在跟踪一些 cron 作业,而另一些则没有。没有源代码控制。
- 当我们的一台服务器出现故障时,这意味着存储在该机器上用户的 crontab 文件中的任何 cron 作业都不会运行,而且我们没有意识到 cron 作业无法运行
理想情况下,我们需要一个设置或软件系统,其中:
- 任何开发人员都可以轻松进入并调整/修复 cron-job,而不是将其限制为个人 crontab
- 对 cron 作业在哪台机器上运行具有灵活性,即使 crontab 以某种方式集中在特定机器上
- 所有成功的 cron 作业运行都被简洁地记录下来,所以我们知道发生了一些事情
- 所有错误都被捕获并根据错误消息和 cron 作业报告给相关开发人员的细粒度列表
- 可以将用户设置为监视某些 cron 作业,无论它们是成功还是失败
- 用户可以收到一份摘要(电子邮件或网页),详细说明在特定时间窗口内哪些作业失败以及哪些作业成功
- 使用RRDtool之类的工具记录 cron 作业统计信息(运行时间、退出状态、输出量)以进行分析
- 健壮性:一台服务器宕机不会破坏整个 cron 作业系统
在网上搜索,我看到一些关于“cron 作业最佳实践”的讨论,但它似乎只解决了我们的一些要求。在对其中一些功能的软件支持方面,似乎有 cronic、shush 和 cronwrap 之类的工具(对不起,我是新用户,仅限于 2 个超链接)。我敢肯定还有更多我想念的。
似乎我可以编写这样的代码,但似乎肯定已经创建了这样的东西。任何关于现有系统/方法的建议,或关于如何构建这样一个系统的指针,将不胜感激。