Как отправить письмо из скрипта unix - PullRequest
2 голосов
/ 30 сентября 2010
#! /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 <1, электронное письмо с уведомлением UP ALERT должно быть отправлено на xyz@mail.com.<br>. И как только значение total_records превысит 1, сообщение электронной почты с уведомлением DOWN ALERT будет отправлено на xyz@mail.com.

ПРИМЕЧАНИЕ. До total_records> 1 нет вышеупомянутой вещи (пункт 2).Только, когда он total_records <1, нам нужно выполнить шаг 2. </p>

Здесь total_records представляет транзакции, поэтому он будет меняться каждый час (как означает tr.TIMESTAMP).tr представляет таблицу транзакций.

Ответы [ 4 ]

2 голосов
/ 01 октября 2010

Чтобы запускать скрипт каждый час с отметкой 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.out, используя команду grep или wc иотправьте электронное письмо с помощью mailx (если установлено) или sendmail:

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 голос
/ 30 сентября 2010

1) Для запуска команды каждый час просто отредактируйте свой пользовательский crontab и добавьте:
0 * * * * command

2) Это можно сделать разными способами. Почтовый сервер UNIX настроен?

0 голосов
/ 30 сентября 2010

Взгляните на страницы crond и sendmail.

0 голосов
/ 30 сентября 2010

Для (1) посмотрите man-страницу cron (1).Это будет делать то, что вы хотите.

Для (2) вам нужно будет либо отправить электронные письма из Oracle (см. Пакет DBMS_MAIL), либо перенаправить вывод из SQLPlus в файл и обработать файл в оболочкескрипт.Подробнее о том, как это сделать, см. В документации к команде mail (1).

...