守护进程来pipe理维护脚本

我有一堆“夜class脚本”来维护一个服务器。 问题是,“行动窗口”,当这些脚本可能运行总是不同的。 有时几分钟甚至几个小时都没有进行,有时候服务器整夜都在收集一些数据。 这些脚本不仅是(但主要是)DB脚本。

一位开发人员提出了实现守护进程的想法。 这个守护进程应该检查服务器的状态,如果有足够的可用资源,一些脚本将被启动。

我觉得这个想法很有趣(不是说诱惑;-)),但不会真的重新发明轮子。 有没有certificate的模式? 一些Shinken或Nagios插件也许?

在Nagios世界中,你可以通过在服务上使用事件处理器来链接任务。

事件处理程序实际上是在第一个服务命​​令之后执行的第二个命令总是 (如果在全局configuration和该服务中激活)。 事件处理程序的基本用法包括启动它与服务的状态和命令的结果。 然后事件处理程序脚本分析服务状态(我们是OK / WARNING / CRITICAL?是第一次检查发送给我们这个状态?硬状态或软状态等),并决定最终启动一个命令。 文档上的上一个链接显示了这样一个基本的bash脚本(请注意事件处理程序始终运行,即使在成功结果之后)。

因此,您可以在平均负载服务上添加一个事件处理程序,并且在服务状态正常的情况下,此事件处理程序可以启动耗费维护任务的CPU。 或者它可以简单地在你的文件系统上设置一个标志,你的cron任务会在运行之前检查这个标志。

现在,您可能需要在决定系统是否真的准备好启动任务之前合并多个服务结果,原因如下:

  • 检查加载平均和内存状态
  • 检查数据库已经准备就绪,状态也很好
  • 检查其他两个不好,但时间到了,你真的需要运行任务,否则你会迟到

像check_cluster这样的一些检查可以帮助您合并多个服务结果,并且如果5上的3个服务处于OK状态(例如),则获得处于OK状态的服务。 然后,您可以使用check_cluster在服务上设置事件处理程序。

pipe理“我迟到”的地位更难。 最好的地方就是事件处理程序代码(如果你迟到,忽略关键或警告状态)。

你也可以有时间限制(例如:维护任务应该只在星期五运行)。 你有几个配方。 恕我直言,最好的是只设置一个标志与事件处理程序,并设置与维护任务调度程序( crontab )的时间段。 Nagios提供了可以连接到你的服务的时间段 ,但是即使是最新版本的Nagios也有一些严重的错误,服务没有按计划运行7/7 24/24,在下一个时间段之外推动下一个服务执行的错误, 1周后(为什么1周?),然后再次启动服务)。 Cron或任何外部调度程序将使更好和更强大的维护调度程序(我没有testingShinken调度程序,也许它真的支持正式的高级时间段 )