如何从unix脚本发送电子邮件

时间:2010-09-30 15:02:54

标签: bash email shell cron

#! /bin/bash
`sqlplus -s <username>/<passwd>@dbname` << EOF   
set echo on  
set pagesize 0  
set verify off  
set lines 32000  
set trimspool on  
set feedback off  
`SELECT   starts_with, SUM (total_records) total_records
    FROM (SELECT ID,
                 (CASE WHEN ID LIKE '2%'  THEN '2____'
                       WHEN ID LIKE '3%'  THEN '3____'
                       WHEN ID LIKE '99%' THEN '99____'
                  END
                 ) starts_with,
                 total_records
            FROM tr
            where ( id like '2%' or id like '3%' or id like '99%'))
               WHERE tr.TIMESTAMP > SYSDATE - 75 / 1440
               AND tr.TIMESTAMP <= SYSDATE - 15 / 1440
GROUP BY starts_with;
`  
exit;  
EOF

1.首先,我如何安排脚本在每1小时后运行一次?

2.其次,要求是发送电子邮件,条件如下:

如果total_records&lt; 1,然后将UP ALERT通知电子邮件发送到xyz@mail.com 一旦total_records大于1,则再次向下警告通知电子邮件发送到xyz@mail.com。

注意:Till total_records&gt; 1,没有上述内容(第2页)要遵循。只有,当它的total_records&lt; 1,我们需要按照步骤2进行操作。

此处,total_records表示交易,因此它会在每小时更改(因为tr.TIMESTAMP表示)。 tr表示事务表。

4 个答案:

答案 0 :(得分:2)

要在0分钟标记处每小时运行一次脚本,请在crontab中添加一个条目,如下所示:

  • 键入crontab -e以编辑您的crontab。
  • 然后添加以下行并保存crontab:

    0 * * * * myscript.sh > myscript.log
    

现在,您需要根据自己的条件确定是否应该发送电子邮件。执行此操作的一种方法是将SQL命令的输出写入如下文件:

#! /bin/bash
`sqlplus -s <username>/<passwd>@dbname` << EOF > sql.out  
set echo on  
set pagesize 0  
set verify off  
set lines 32000  
set trimspool on  
set feedback off  
`SELECT   starts_with, SUM (total_records) total_records
    FROM (SELECT ID,
                 (CASE WHEN ID LIKE '2%'  THEN '2____'
                       WHEN ID LIKE '3%'  THEN '3____'
                       WHEN ID LIKE '99%' THEN '99____'
                  END
                 ) starts_with,
                 total_records
            FROM tr
            where ( id like '2%' or id like '3%' or id like '99%'))
               WHERE tr.TIMESTAMP > SYSDATE - 75 / 1440
               AND tr.TIMESTAMP <= SYSDATE - 15 / 1440
GROUP BY starts_with;
`  
exit;  
EOF

然后使用sql.outgrep命令将您的条件应用于wc,并使用mailx(如果已安装)或sendmail发送电子邮件:< / p>

if grep -q something sql.out
then
    # send email containing the output of the SQL statement
    cat sql.out | mailx -s "UP ALERT" xyz@mail.com
fi

#delete sql.out
rm sql.out

答案 1 :(得分:1)

1)要每小时运行一个命令,只需编辑用户crontab并添加:
0 * * * * command

2)这可以通过很多方式完成。是否配置了UNIX邮件服务器?

答案 2 :(得分:0)

对于(1)查看cron(1)的手册页。这将做你想要的。

对于(2),您需要从Oracle内部发出电子邮件(请参阅DBMS_MAIL包)或将SQLPlus的输出重定向到文件并在shell脚本中处理该文件。有关如何执行此操作的详细信息,请参阅mail(1)命令的文档。

答案 3 :(得分:0)

看看crond和sendmail的联机帮助页。