生成包含在KSH上运行的多个后台脚本的输出结果的电子邮件

时间:2013-09-09 13:37:16

标签: ksh nohup

首先介绍一下:我们有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* &

非常感谢任何帮助。

3 个答案:

答案 0 :(得分:1)

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

来自crontab文档:

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

Exanple:

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

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

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

答案 1 :(得分: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

答案 2 :(得分:0)

如果你包含这个'&> / dev / null'重定向你的cron作业你不会得到任何输出,而cron不会邮寄任何东西。我认为你更容易像你刚才那样重定向你的cron工作:

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

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