linux - 在 AWK 中结束导致动作无限生成的系统操作
问题描述
我正在监视将触发电子邮件的关键字的日志文件。问题是代码无休止地生成电子邮件。即使有几行相同的关键字,我也希望只收到一封电子邮件。
我尝试了以下方法:
'{if(!seen[$1]++)print $1}'
但我不知道如何或在何处将其应用于现有代码:
tail -fn0 user | awk '/disconnect_tcp_conn/ {
system("mail -s \"Server is down\" mail@gmail.com </dev/null")
print "Server is Down"
期望的结果是在第一封电子邮件发送后结束所有电子邮件发送,或者在发送第一封电子邮件后结束电子邮件发送和监控。我更喜欢只结束电子邮件操作并继续监控,但除了结束一切之外。
解决方案
如果服务器恢复时还有另一条日志消息,您可以在看到断开连接消息时设置一个变量,并在看到重新连接消息时清除它。
tail -fn0 user | awk '
!server_down && /disconnect_tcp_conn/ {
system("mail -s \"Server is down\" mail@gmail.com </dev/null")
print "Server is Down"
server_down = 1 }
server_down && /reconnect_tcp_conn/ {
system("mail -s \"Server is up\" mail@gmail.com </dev/null")
print "Server is Up"
server_down = 0 }'
推荐阅读
- webpack - Webpack 5 模块联合:使用身份验证访问远程模块
- reactjs - Grapqhql 数据在解构时是“未定义的”,尽管数据在那里
- r - 在R中将日期时间转换为三个字母的月份和年份
- python - Airflow:插件被 1.10.14 和 Python 3.8 破坏
- python - “TypeError:列表索引必须是整数或切片,而不是元组”-如何解决
- reactjs - 我如何使用 tsx 和 sass 文件运行故事书
- c - 在 C 程序中使用递归查找最小值和最大值
- angular - 材料角度组件不加载
- r - 如何过滤掉R中只有一列重复值的表的所有行?
- python - gunicorn not Binding 显示一些包错误?