当选择查询返回特定值时,发送电子邮件

时间:2011-04-20 22:57:52

标签: shell command-line

我想在选择查询返回特定值后发送电子邮件。

我目前将它传输到文本文件只是为了给我一些显示。

echo "SELECT * FROM jobs WHERE status = -20;" | mysql -u user -pXXX -h 
          servername --database=chosenDB >> /var/log/DBcheck.txt

现在当值返回到“-20”或我选择的任何数字时,我将如何创建一个电子邮件警报,以便在它变为真时发送。将其用作监控工具。我运行的服务器已经设置了postfix,确认工作正常。

任何信息都将不胜感激。

谢谢!

2 个答案:

答案 0 :(得分:0)

echo Here comes the Sun | mail -s Subject <email-address>

应该发送电子邮件。你需要把它放在正确的if语句中。

答案 1 :(得分:0)

如果您的查询返回单行输出,可能是这样的。

#!/bin/sh

case `echo "SELECT * FROM jobs WHERE status = -20;" |
    mysql -u user -pXXX -h servername --database=chosenDB` in
  -20) echo It is minus twenty | /usr/lib/sendmail -oi you@example.com ;;
esac

更有用的是,将输出放在临时文件中,如果它不感兴趣则将其删除。

#!/bin/sh

t=`mktemp -t muesliXXXXXXX`  # Not entirely portable -- google this bit
trap 'rm -f $t' 0
trap 'exit 127' 1 2 3 5 15

mysql -u user -pXXX -h servername --database=chosenDB <<'____HERE' >$t
    SELECT * FROM jobs WHERE status = -20;
____HERE

if grep -qw '-20' $t; then
  ( cat <<'____HERE'; cat $t) | /usr/lib/sendmail -oi -t
From: Friendly Cron Job <root@example.com>
To: you <you@example.com>
Subject: It is Minus Twenty

____HERE
fi

一些shell / some cats允许你同时使用here文档和命名文件,避免使用Cat。

cat - $t <<'____HERE' | /usr/lib/sendmail -oi -t

但我担心这不是完全可移植的。

grep只是为了给你一个想法;用不那么特别的东西替换它,或许实际上解析输出文件并对解析结果执行复杂的逻辑。