我们使用 cron 来管理多个位置的备份和其他作业。使用 chef 填充 cron.daily、cron.hourly 等文件到目前为止效果很好,但也存在一些问题:
- 我不想为了接收 cron 输出而管理系统上的邮件服务器
- 我希望能够将输出放入我的 cron 作业中,如果没有发生任何问题,则不会收到有关它们的电子邮件
- 我不想检查 /var/log/messages 来查看作业是否失败而没有输出
- 我不想必须登录系统才能发现备份作业仍在运行
理想情况下,我想要一个基于 Web 的前端,可以用来查看这些信息,可以作为 cron 的扩展或完全替代。
我可以通过编写一些脚本自己解决上述问题,但我确信其他人已经解决了这个问题。
请注意,我承认这是一个与备份完成后验证备份完全不同的问题。
答案1
您可以使用救援- 使用其内置的 Web 界面来管理作业。查看 Resque Railscast 以了解其实际操作。
然后使用 ruby gemresque-scheduler
在预定的时间将作业添加到队列中。
有一篇很好的博客文章: “使用 Resque 为你的 Rails 应用程序执行 Cron 任务”
答案2
这可能并不完全符合您的要求,但我最近采用的方法是将两个 Ruby 库和一个 Web 服务结合起来。
首先,宝石每当,它为您提供了一个干净的 ruby 界面,用于安排 cron 作业(因此,它不是 cron 的替代品,只是顶层)。
接下来是备份gem,它提供了一套可靠的工具,可以非常巧妙地管理备份(包括云存储位置)。当任务失败和/或成功时,备份还会向您发送电子邮件(由您配置)。
拼图的最后一块是发送网格- 虽然他们大力推广付费计划,但他们确实有一个免费计划,允许每天发送 200 封电子邮件。我肯定不会因为这个脚本而让他们的服务器负担过重,所以它对我来说很合适。他们可能需要几个小时来确认一个帐户,但一旦设置好,我就没遇到任何问题了。
如果您愿意的话,我们很乐意分享一些示例脚本。
答案3
听起来你想要的不是cron
替代品,而是备份系统(像巴库拉请
参阅下面我对您个人观点的回答。
我不想为了接收 cron 输出而管理系统上的邮件服务器
您不必这样做cron
。正如其他人指出的那样,您可以运行 SSMTP 或仅发送的 sendmail 实例(仅队列运行器)。
或者,您可以将 cron 输出重定向到文件或 syslog,或将其通过管道传输到您想要处理的任何其他程序。
我希望能够将输出放入我的 cron 作业中,如果没有发生任何问题,则不会收到有关它们的电子邮件
按照上述内容,您可以将 cron 输出传送到处理程序、记录器等。- 您不必接收 cron 邮件,这只是默认配置的方式......
我不想检查 /var/log/messages 来查看作业是否失败而没有输出
这取决于您的备份软件的工作方式(以及它生成日志条目或可解析输出的适应性,以便您可以通过脚本提供它并根据需要发送消息。
“真正的”备份系统将通过其控制台/监控工具为您提供此信息,甚至可以在工作期间需要注意时向您发送电子邮件。
我不想必须登录系统才能发现备份作业仍在运行
同样,这更多地取决于您的备份软件。Bacula 和其他专用备份程序可让您从中央控制台监视每台客户端计算机上的代理状态,因此您无需登录到各个客户端来检查其状态。Bacula
有一个基于 Web 的界面,但我不能保证:我使用命令行控制台程序。
这些对您的“其他工作”都没有真正的帮助(正如您所指出的,它们的输出可以用我对前两点的注释加上“一点脚本”来处理),但使用像 cron 这样标准的、知名的软件将使长期维护更容易。
答案4
您可以尝试使用结构化作业调度程序来管理系统中的任务。例如开源作业调度器对此很有效。好处是您将拥有一个中央控制台来管理事物,拥有一个方法来处理依赖性检查,以及在错过作业窗口的情况下重新运行或正确启动作业的适当方法。