我想监控一个日志文件的错误,然后发送电子邮件给管理员。
日志文件包含以下数据
11 Aug 02:30 Service1 restarted
11 Aug 05:35 Service1 restarted
11 Aug 08:43 Service2 restarted
11 Aug 11:20 Service1 restarted
11 Aug 14:53 Service2 restarted我想创建一个脚本,每5分钟运行一次,检查最后一次出现的服务,重新启动并发送电子邮件。
例如:如果脚本在02:35运行,它将看到Service1重新启动,因此它将发送一封类似于Service1 restarted at 02:30的电子邮件。现在,当脚本在5:45运行时,它应该发送电子邮件,Service1只在05:35重新启动(不应该包括02:35重新启动)。
是否有办法达到这一要求?我对Linux和Shell脚本基本上是新手。
发布于 2015-08-11 13:42:12
首先,制作一个5分钟的crontab:
*/5 * * * * myscript.sh它运行myscript.sh (在$HOME dir中)
#!/bin/bash
tail -1 /path/to/file.log > /some/dir/after
if cmp -s /some/dir/after /some/dire/before
then
cat /some/dir/after | mail -s "restart" admin@exemple.com
cp /some/dir/after /some/dir/before
fi有正确的值(当然)。
请注意,这意味着五分钟内不会有两次重新启动。
发布于 2015-08-11 13:35:15
我假设在02:35,文件的最后一行将是重新启动02:30,所以您所需要的只是一个cron条目,它看起来像
*/5 * * * * tail -1 /path/to/file.log | mailx -s "Last restart" admin@example.com这种方法的缺点是管理员将在02:35,02:40,02:45收到相同的电子邮件,.
发布于 2017-02-22 21:04:22
对@glenn-jackman提供的答复的一个改进是使用mailx的-E选项。来自mailx的手册页:
-E不发送空正文的消息。这对于cron(8)脚本的管道错误非常有用。
https://unix.stackexchange.com/questions/222518
复制相似问题