我有这个脚本我正在工作,但似乎无法让它发送电子邮件。我有一个bash调试,但脚本似乎没有执行mail命令。任何帮助将不胜感激。我将电子邮件变量设置为
echo "Please enter email address"
read -r var2
我将电子邮件变量设置为
EMAIL="$var2"
该脚本创建了cat使用的日志文件,它似乎做了我需要的所有“除了”发送电子邮件。完成工作的部分如下。
while true;
do
cat ip_monitor_list.txt | while read IP
do
fping -c 1 -q "$IP" > /dev/null
if [ $? -eq 0 ]; then
STATUS=$(cat $LOG."$IP")
if [ "$STATUS" != "$IP-UP!" ]; then
echo "$(date): ping OK, $IP host is UP!" |
mail -s "$IP host is UP!" "$EMAIL"
fi
echo "$IP-UP!" > $LOG.$IP
我还有一个“else语句与上面的内容非常类似,但如果它已经关闭也会做同样的事情。我注意到我是否只是在终端linux $ mail -s中输入它来尝试邮件命令”主题“myemail@blah.com,它有效。但如果我将下面的内容直接粘贴在终端下面
echo "$(date): ping Failed, $IP host is DOWN!" | mail -s "$IP host is DOWN!" myemail@blah.com
我得到-bash:!“:找不到事件
再次感谢您的帮助,我非常感谢。
以下是完整版的更新版本。
#!/bin/bash
exec 5> debug_output.txt
BASH_XTRACEFD="5"
PS4='$line0: '
set -x
trap "exit" INT
echo "Please enter time in seconds:"
read -r var1
echo "Please enter email address"
read -r var2
LOG=mylog.log
SECONDS="$var1"
EMAIL="$var2"
#Array to write IP's pasted to ip_monitor_list.txt file.
arrIP=()
echo "Enter the IP addresses here enter and Ctrl-d when finished :"
while read IP
do
arrIPAddress+=($IP)
echo "$IP" >> ip_monitor_list.txt
echo "$IP-UP\!" > $LOG.$IP
done
while true;
do
cat ip_monitor_list.txt | while read IP
do
fping -c 1 -q "$IP" > /dev/null
if [ $? -eq 0 ]; then
STATUS=$(cat $LOG."$IP")
if [ "$STATUS" != "$IP-UP\!" ]; then
echo "$(date): ping OK, $IP host is UP\!" |
mail -s "$IP host is UP\!" "$EMAIL"
fi
echo "$IP-UP\!" > $LOG.$IP
else
STATUS=$(cat $LOG."$IP")
if [ "$STATUS" != "$IP-DOWN\!" ]; then
echo "$(date): ping Failed, $IP host is DOWN\!" |
mail -s "$IP host is DOWN\!" "$EMAIL"
fi
echo "$IP-DOWN\!" > $LOG.$IP
fi
done
sleep $SECONDS
DONE
#File cleanup
rm ip_monitor_list.txt