3

先介绍一点背景知识:我们有 9 台 JVM 服务器正在输出日志文件,我会不断解析这些日志文件,以便在发生错误时查找这些文件。日志每 5-10 分钟滚动一次,但文件名不会更改。我正在使用 SupperPutty 打开 9 个会话并针对每个日志文件运行以下脚本,但这仅在我工作时才有效。

tail -f *filename* | nawk 'c-->0;$0~s{if(b)for(c=b+1;c>1;c--)print r[(NR-c+1)%b];print;c=a}b{r[NR%b]=$0}' b=2 a=4 s="Bind value for HASCHILDREN = 0"

所以我想把上面的脚本变成一个后台脚本,当发生错误时会通过电子邮件发送给我。我首先必须将 KSH 放入第二个 shell 以避免在我退出时停止脚本(即使我将它们设置为 NOHUP)。我尝试如下设置脚本,但发生错误时它不会给我发电子邮件。

tail -f *filename* | nawk 'c-->0;$0~s{if(b)for(c=b+1;c>1;c--)print r[(NR-c+1)%b];print;c=a}b{r[NR%b]=$0}' b=2 a=4 s="Bind value for HASCHILDREN = 0" | mailx -s "Childrens flag has been detected" *email* &

任何帮助将不胜感激。

4

3 回答 3

1

您可以尝试在 crontab 文件中安排一个 cron 作业,以每 5-10 分钟调用一次脚本,检查日志中的任何更改,并在发现错误条目时向您发送电子邮件。

从 crontab 文档中:

crontab 命令调用允许您创建 crontab 文件的编辑会话。您为该文件中的每个 cron 作业创建条目。每个条目必须采用 cron 守护程序可接受的格式。有关创建条目的信息,请参阅 crontab 文件条目格式。

示例:

要在每周一、周三和周五早上 6:30 运行日历命令,请输入:

    30 6 * * 1,3,5 /usr/bin/calendar

或者,您可以通过指定 File 参数来创建 crontab 文件。如果文件存在,它必须是 cron 守护进程所期望的格式。

于 2013-09-09T16:37:32.697 回答
0

所以我设置了一个 cron 作业并告诉它通过电子邮件发送我的公司电子邮件帐户,但它会将输出放入我的 unix 邮箱。我错过了什么吗?

MAILTO="电子邮件"

0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,48,51,54,57 * * * * nawk 'c-->0 ;$0~s{if(b)for(c=b+1;c>1;c--)print r[(NR-c+1)%b];print;c=a}b{r[NR %b]=$0}' b=2 a=4 s="HASCHILDREN 的绑定值 = 0" /maximo/logs/file1 >/dev/null 2>&1

0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,48,51,54,57 * * * * nawk 'c-->0 ;$0~s{if(b)for(c=b+1;c>1;c--)print r[(NR-c+1)%b];print;c=a}b{r[NR %b]=$0}' b=2 a=4 s="HASCHILDREN 的绑定值 = 0" /maximo/logs/file2 >/dev/null 2>&1

于 2013-09-09T20:50:54.623 回答
0

如果您包含此 '&> /dev/null' 来重定向您的 cron 作业,您将不会得到任何输出,并且 cron 不会发送任何内容。我认为您更容易像第一次那样重定向您的 cron 作业:

    | mailx -s "Childrens flag has been detected" *email*

正确的语法是 MAILTO="user_name",我建议如果您使用上述方法,那么也将其更改为 MAILTO="" 以禁用来自 cron 的电子邮件报告,因为您将通过 mailx 发送电子邮件。

于 2013-09-11T21:22:44.927 回答