0

我正在使用 wget 从我们的一个服务器中获取一些文件,如果它们已更新,则每小时一次。我希望脚本在 wget 下载更新的文件时向员工发送电子邮件。

当 wget 不检索文件时,文本 wget 输出的最后一位是

file.exe' -- not retrieving.
<blank line>

如何查看那段文本,并且仅在没有看到该文本时才运行我的邮件命令?

4

3 回答 3

7

我会用类似的东西来做

if ! wget ... 2>&1 | grep -q "not retrieving"; then
   # run mail command
fi
于 2009-12-31T22:57:15.617 回答
3

' ' 的退出状态是什么wget时候成功,什么时候失败?最有可能的是,它以非零退出状态报告失败,在这种情况下,它在很大程度上是微不足道的:

if wget http://example.com/remote/file ...
then mailx -s "File arrived at $(date)" victim@example.com < /dev/null
else mailx -s "File did not arrive at $(date)" other@example.com < /dev/null
fi

如果您必须分析 ' ' 的输出,wget则捕获并分析它:

wget http://example.com/remote/file ... >wget.log 2>&1
x=$(tail -2 wget.log | sed 's/.*file.exe/file.exe/')

if [ "$x" = "file.exe' -- not retrieving." ]
then mailx -s "File did not arrive at $(date)" other@example.com < /dev/null
else mailx -s "File arrived at $(date)" victim@example.com < /dev/null
fi

但是,在这种情况下,我担心可能存在其他错误导致其他消息,进而导致不准确的邮件。

于 2009-12-31T23:02:41.517 回答
0
if ${WGET_COMMAND_AND_ARGUMENTS} | tail -n 2 | grep -q "not retrieving." ; then
    echo "damn!" | mail -s "bad thing happened" user@example.com
fi
于 2009-12-31T22:55:39.083 回答