首页 > 解决方案 > 在我现有的关键字检测脚本中引入一个函数,该函数将在预定时间段后重新检查相同的条件

问题描述

我有一个脚本可以监控日志文件中的关键字。一旦发现关键字,它将执行一个功能(发送服务器关闭/启动状态的电子邮件)。

*已编辑我现在希望脚本报告停机状态,然后尝试通过调用脚本来重新启动服务器。

问题是当网络繁忙或拥塞时,可能会出现关键字即时监控。它不会经常发生,当它发生时不会持续很长时间,也不一定意味着服务器已关闭。简而言之,我试图消除或以其他方式减少虚假报告。

我认为我最好的方法是拥有脚本:

  1. 监视“服务器关闭”关键字(已经在脚本中)
  2. 检测关键字(已经在脚本中)
  3. 暂停一段预定的时间。说也许 5 秒暂停是为了让服务器在尝试重新启动之前完全关闭。
  4. 报告“服务器关闭”状态(已经在脚本中)
  5. 发出触发 (restart.sh) 脚本的命令
  6. 监视“服务器启动”关键字(已经在脚本中)
  7. 检测“服务器启动”状态(已经在脚本中)
  8. 报告“服务器启动”状态(已经在脚本中)

所以我想在调用restart.sh脚本之前几乎只需要在检测到down状态后暂停

到目前为止,这是我的脚本中的内容:

tail -fn0 /var/log/user | /usr/bin/gawk '
    /disconnect_tcp_conn/ { report("down") }
    /daemon apps started/  { report("up") }

    function report(curr_state,    msg) {
        if ( prev_state != curr_state ) {
             msg = "%m/%d/%Y %H:%M:%S Server is " curr_state
            system("mail -s \047" msg "\047 mail@gmail.com </dev/null")
            print msg | "cat>&2"
            print strftime(msg) | "tee -a \047/var/log/server_mon.txt\047 >&2"
            prev_state = curr_state
        }
    }

所以我想几乎只需要在调用restart.sh脚本之前报告down状态后暂停,然后在报告之前等待up状态。如果永远不会发生,我仍然会收到原始通知。

任何帮助都会很棒。谢谢

标签: bashshellawkcentos

解决方案


推荐阅读