如何处理不遵守沉默规则的预打包程序?

如何处理不遵守沉默规则的预打包程序?

具体问题:

邮递员附带一个脚本,用于从平面文件同步邮件列表订阅者(同步成员(8))。

该脚本没有很好地遵守沉默规则。例如,当没有什么可做时(例如当前订阅者和平面文件相同),它会打印“Nothing to do”。到stdout

当我们每隔几分钟运行这个程序时,任何输出都会记录到我们的日志服务器(带有系统日志)然后每天发送带有日志的电子邮件,其中往往有很多无用的消息。

有几种方法可以解决这个问题,我想知道哪一种是最合适的:

  1. 管道stdout/dev/null.
  2. 使用rsyslogd 过滤专门过滤掉这些消息。
  3. 修改源代码以sync_members遵守沉默规则。
  4. 复制 的源代码sync_members,修改副本并从现在开始使用该副本。

虽然每种方法都能达到预期的结果,但每种方法都有其缺点:

  1. 如果某个时候有一些有趣的事情怎么办stdout
  2. 似乎是一个相当“不干净”“黑客”解决方案,我敢说我们那里有很多程序不遵守沉默规则。
  3. 如果有更新会发生什么?
  4. 与3相同。

我倾向于选择 2,但如果我必须对我们系统中的每个行为不良的程序都执行此操作...

你怎么认为?是否还有支持或反对的其他选项或论点?对于这种情况是否有最佳实践(我敢说这个问题并不新鲜)?

答案1

您缺少选项 5:编写一个包装脚本来重定向输出sync_members并检查它是否是“无事可做”。

通过正确的退出代码检查,这可以很好地完成工作。它相对升级安全 - 只要“无”消息不改变,您的脚本就不必维护。

您可以决定如何处理该脚本中的错误情况(即仅cat处理日志文件,或者做一些更有趣的事情)。

答案2

两个建议:

  1. 提交错误报告mailman,以便开发人员可以为每个人修复错误。

  2. 将调用更改synch_memberssynch_members | egrep -v "Nothing to do."That 将消除“无事可做”。消息。

答案3

如果“无事可做”没有变化(或者可以简化为正则表达式),您可以像这样使用 grep :

    grep -v "Nothing to do" *.log

从现在开始,您可以采取很多措施来解决您的问题:

  • 重定向上述命令的输出以创建新的“静默”日志。
  • 根据上述命令定义函数和别名,以用作交互式会话中的快捷方式(您甚至可以定义“无事可做”作为环境变量)。
  • 定义cron将定期自动执行此类命令的作业。

使用基本的 Unix 工具和现代 shell 可以做很多事情。我认为现在决定修改源代码还为时过早。保持简单,这样可以避免浪费很多时间。

相关内容