【问题标题】:Reading log file and if error occurs restart service读取日志文件,如果发生错误重启服务
【发布时间】:2021-12-22 06:33:10
【问题描述】:

我正在尝试创建一个脚本来监视日志文件,如果出现错误,它会使用 python 发送一封电子邮件。该脚本有效,但一旦检测到错误,它就会开始发送垃圾邮件。有没有办法避免这种情况?

# cat /usr/local/bin/monitor.bash
#!/bin/bash

tail -fn0 /var/log/syslog | while read line ; do
echo "${line}" | grep -i "error" > /dev/null
if [ $? = 0 ] ; then
  python emailsend.py
fi
done

提前致谢!

编辑:我计划将此作为服务运行,以持续监控日志。一旦它检测到错误,我希望它发送一封电子邮件,然后它会重新启动一些服务(尚未将其添加到脚本中)并继续监视文件直到它旋转。我希望这可以缩小范围。

【问题讨论】:

  • 使用适当的监控系统可以解决此类问题。
  • 您的问题未明确说明。检测到错误并发送电子邮件后,您接下来要做什么?继续监视同一个日志文件?如果是,那么您得到的就是您所要求的,因为错误仍然存​​在。其他的东西(例如停止监控,登录并继续监控......)?请解释一下。
  • 我将问题编辑得更具体。感谢您的反馈。
  • @Dybbuk 更新了我的答案,看看吧。

标签: bash logging grep monitor tail


【解决方案1】:

如果我正确理解了代码的逻辑,您可以在日志中添加一些行,以防止进入if 子句并重新启动服务。

# cat /usr/local/bin/monitor.bash
#!/bin/bash

tail -fn0 /var/log/syslog | while read line ; do
echo "${line}" | grep -i "error" > /dev/null
if [ $? = 0 ] ; then
  python emailsend.py
  # append line to the log to prevent grepping of 'error'
  echo 'dummy line' >> /var/log/syslog
  # restart your services here
fi
done

希望对你有帮助。

【讨论】:

  • 是的,谢谢你,虚拟线似乎可以解决问题
猜你喜欢
  • 2018-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多