linux - 服务器脚本在不应该发送电子邮件时继续发送
问题描述
我编写了一个脚本,每 5 分钟从 cron 运行一次。
它将现有 IP 放入一个名为“nowipaddr”的文件中,然后运行 if 循环以检查新 IP 与现有 IP,如果两个 IP 保持相同,则可以跳过发送电子邮件。否则,如果 IP 发生变化,它应该发送一封带有新 IP 的电子邮件。
问题是它仍然每 5 分钟向我发送一封电子邮件,无论 IP 是否发生变化。如果有更改,它会使用新 IP 更新文件“nowipaddr”并发送电子邮件。如果没有变化,它会做同样的事情。
#!/bin/bash
NOWIPADDR="/home/scripts/nowipaddr"
GETIPADDR="dig +short myip.opendns.com @resolver1.opendns.com"
LOG="/home/scripts/ip.log"
timestamp=$( date +%T )
curDate=$( date +"%m-%d-%y" )
if [ -f $NOWIPADDR ]; then
if [[ `$GETIPADDR` = $(< $NOWIPADDR) ]]; then
echo $curDate $timestamp " IP address check: " $(< $NOWIPADDR) >> $LOG
else
$GETIPADDR > $NOWIPADDR
mail -s "New Server IP" email@gmail.com < $NOWIPADDR
fi
else
curl $GETIPADDR > $NOWIPADDR
mail -s "Server IP" email@gmail.com < $NOWIPADDR
fi
我希望它在 IP 发生变化时发送电子邮件
解决方案
我对似乎运行良好的代码进行了一些更改,但我想确保它是正确的方式
#!/bin/bash
NOWIPADDR="/home/scripts/nowipaddr"
GETIPADDR="dig +short myip.opendns.com @resolver1.opendns.com"
LOG="/home/scripts/ip.log"
timestamp=$( date +%T )
curDate=$( date +"%m-%d-%y" )
if [ -f $NOWIPADDR ]; then
if [ `cat $NOWIPADDR` = `$GETIPADDR` ]; then
echo $curDate $timestamp " IP address check: " `cat $NOWIPADDR` >> $LOG
else
$GETIPADDR > $NOWIPADDR
mail -s "New Server IP" email@gmail.com < $NOWIPADDR
fi
else
curl $GETIPADDR > $NOWIPADDR
mail -s "Server IP" email@gmail.com < $NOWIPADDR
fi
我变了
if [[ `$GETIPADDR` = $(< $NOWIPADDR) ]]; then
至
if [ `cat $NOWIPADDR` = `$GETIPADDR` ]; then
基于来自同一链接的其他答案
推荐阅读
- android - 滚动进出视图时,TextureView isAvailable 偶尔为假
- php - 在 FormRequest 和验证中被认为是空的字段
- c# - 在实体框架核心中执行业务规则
- php - 设置一个 cronjob 来运行一个 php 文件并更改我的 sql 数据库
- ms-access - VBA 无法从查询中找到日期字段
- mysql - 如何让 SQL SELECT 仅显示在 WHERE 子句中触发结果的列
- java - 用于解决树同构的递归算法?
- php - Yii2:如何在 Gridview 的所有行上显示更少的行?
- highcharts - highcharts 图表高度与图例不同
- apache-kafka - 如何配置 Kafka RPC 调用者主题和组