bash - 在我的脚本中创建通过电子邮件发送的内容的日志
问题描述
此脚本当前监视日志文件中的关键字。在发现所述关键字后,脚本会生成与服务器状态(启动或关闭)有关的消息。然后它直接向我输出一封电子邮件。脚本的其余部分只是在预定时间后终止脚本。
最后,我现在想做的是将发送到电子邮件的相同信息发送到日志文件:emailoutput > /var/log/server_mon.txt
我尝试使用 cat 和 exec 命令将打印的消息定向到文件,但我的语法每次都是错误的。不是真正的程序员,也不确定如何或在何处应用该命令。我的猜测是在“打印”之后的某个地方,但又一次,不确定如何。
#!/bin/bash
PATH=/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
tail -fn0 /var/log/user | /usr/bin/awk '
/disconnect_tcp_conn/ { report("down") }
/daemon apps started/ { report("up") }
function report(curr_state, msg) {
if ( prev_state != curr_state ) {
msg = "Server is " curr_state
system("mail -s \047" msg "\047 mail@gmail.com </dev/null")
print msg | "cat>&2"
prev_state = curr_state
}
}
'
&
PID=$!
DIEAT=`expr $SECONDS + 58`
while [ -d /proc/$PID ] && [ "$SECONDS" -lt "$DIEAT" ]
do
sleep 1
done
[ -d /proc/$PID ] && kill "$PID"
wait
预期结果是将内容输出到电子邮件和文本文件,以跟踪脚本报告服务器状况的频率。
我在centos 5.5 btw上运行这个脚本..
解决方案
在您的 awk 脚本中,确保 msg 进入标准输出:
print msg
然后在你的 awk 脚本之外添加:
| tee -a /var/log/server_mon.txt
推荐阅读
- prolog - 包装值的 Prolog 添加
- javascript - 在 React Native 中发布和订阅事件
- r - 从数据框中创建具有缺失值的 ts 时间序列
- java - Retrofit 中未正确处理 REST 方法中的参数
- c++ - std::filesystem::create_directories Visual Studio 2017
- sparql - 如何使用 SPARQL 加减数字?
- cordova - Ionic 3 闪屏在某些 iPhone 上冻结
- javascript - getElementById 其中 Element 是动态创建并附加到 DOM
- apache - Kubernetes Apache2 被杀死
- react-native - React Native - 每个项目有多个 iOS 构建