0

我对 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 命令本身就可以完美运行;它监视定义的日志文件中的“示例 sshd”和“为用户打开的会话”,然后使用 espeak 说“正在打开 SSH 会话”。正如您在上面的摘录中所期望的那样,bash 脚本不会同时运行多个尾部(或者至少它在第一个尾部命令之后停止)。

我想我有几个问题:我应该如何设置这个脚本?在后台不断运行此脚本的最佳方法是什么 - 例如 init?是否有任何教程/文档可以帮助我?是否已经有类似的东西可供我使用?

谢谢,任何帮助将不胜感激 - 对不起,很长的帖子。

4

1 回答 1

0

就个人而言,我会尝试将这些设置为单独的 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

于 2013-07-23T14:02:17.603 回答