所以我正在尝试制作一个后台进程,"espeak"的特定日志事件



我对linux还比较陌生,如果解决方案简单/显而易见,请原谅我。。

我正在尝试设置一个后台运行脚本,该脚本使用awk和tail监视日志文件中的某些关键字模式,然后使用espeak在这些关键字出现在日志文件(使用sysklogd)中时提供简化的通知

该概念源自本指南

这是我试图做的一个可怕的例子:

#!/bin/bash
tail -f -n1 /var/log/example_main | awk '/example sshd/&&/session opened for user/{system("espeak "Opening SSH session"")}'
tail -f -n1 /var/log/example_main | awk '/example sshd/&&/session closed/{system("espeak  "Session closed. Goodbye."")}''
tail -f -n1 /var/log/example_main | awk '/example sshd/&&/authentication failure/{system("espeak  "Warning: Authentication Faliure"")}'
tail -f -n1 /var/log/example_main | awk '/example sshd/&&/authentication failure/{system("espeak "Authentication Failure. I have denied access."")}'

第一个tail命令本身工作非常完美;它监视定义的日志文件中的"example sshd"one_answers"session opened for user",然后使用espeak表示"Opening SSH session"。正如您在上面摘录的内容中所期望的那样,bash脚本不会同时运行多个tail(或者至少在第一个tail命令之后停止)。

我想我有几个问题:我应该如何设置这个脚本?在后台不断运行这个脚本的最佳方式是什么?例如init?有什么教程/文档可以帮助我吗?已经有这样的东西可以用了吗?

谢谢,如果有任何帮助,我们将不胜感激——很抱歉发了这么长的帖子。

就我个人而言,我会尝试将其中的每一个设置为单独的cron作业。这将允许您在特定的时间和指定的间隔运行它。

例如,您可以键入crontab -e

然后在里面,列出每个尾部命令如下:

5 * * * * tail -f -n1 /var/log/example_main | awk '/example sshd/&&/session opened for user/{system("espeak "Opening SSH session"")}'

这将在每小时后的5分钟运行一个命令。

这是我发现的一个不错的指南:HowTo:Add Jobs To cron

最新更新