我想在选择查询返回特定值后发送电子邮件。
我目前将它传输到文本文件只是为了给我一些显示。
echo "SELECT * FROM jobs WHERE status = -20;" | mysql -u user -pXXX -h
servername --database=chosenDB >> /var/log/DBcheck.txt
现在当值返回到“-20”或我选择的任何数字时,我将如何创建一个电子邮件警报,以便在它变为真时发送。将其用作监控工具。我运行的服务器已经设置了postfix,确认工作正常。
任何信息都将不胜感激。
谢谢!
答案 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
只是为了给你一个想法;用不那么特别的东西替换它,或许实际上解析输出文件并对解析结果执行复杂的逻辑。