代码之家  ›  专栏  ›  技术社区  ›  demonic240

为KSH上运行的多个后台脚本生成带有输出结果的电子邮件

  •  3
  • demonic240  · 技术社区  · 12 年前

    首先有一点背景知识:我们有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 回复  |  直到 12 年前
        1
  •  1
  •   nay743    12 年前

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

    从crontab文档中:

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

    示例:

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

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

    或者,您可以通过指定file参数来创建一个crontab文件。如果该文件存在,那么它必须采用cron守护进程所期望的格式。

        2
  •  0
  •   demonic240    12 年前

    所以我设置了一个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=“HASCHILLED的绑定值=0”/maximo/logs/file1>/dev/noll 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=“HASCHILLED的绑定值=0”/maximo/logs/file2>/dev/noll 2>&1.

        3
  •  0
  •   nay743    12 年前

    如果您将此'&>/dev/noll'重定向你的cron作业,你不会得到任何输出,cron也不会发送任何邮件。我认为你更容易像第一次那样重定向你的cron工作:

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

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