Bash脚本用于检查cmd的输出是否在一段时间内增加,如果是,则运行

时间:2018-01-22 19:19:36

标签: bash shell

我希望在时间帧之间比较文件的输出。 例: 运行命令,输出数值1到1000(1-1000)。我需要在15分钟后运行相同的命令,看看它是否增加了20,如果是,请发送电子邮件。

我认为这很简单,但我无法理解哪里开始。

我认为我必须运行命令并输出到文件,并且当命令在15分钟内再次运行时比较这些值。我认为我需要检查输出文件是否存在,然后创建,如果没有。

我是脚本新手,可以使用帮助。我得到了以下但只是被困在了之外。我希望尽可能简化

#!/bin/bash

today="date '+%Y_%m_%d'"
command="echo "select count(status) from alarm where status ='open'" | my-db"
# the command above will return the following for example
#count(status)
#34

$command > /tmp/$today.dblogout 

3 个答案:

答案 0 :(得分:2)

您可以简单地将最后已知(最后检索的)值保留在临时文件中,并且每次执行脚本时,检查自上次运行以来该值增加了多少(沿途更新最后的已知值)。

例如:

#!/bin/bash
store=/tmp/last_value
threshold=20

last=$(<"$store")
current=$(my-db <<<"select count(status) from alarm where status = 'open'" | tee "$store")

if (( current - last > threshold )); then
    echo "Sending mail..."
fi

答案 1 :(得分:1)

我做了类似的事情,如果我的磁盘已满,请提醒我:

#!/bin/sh

THRESHOLD=85

datafile=/var/run/df_slash_var_pcent_avail.txt

# get previous value:
prev=$(tail -1 $datafile | cut -d\  -f2)

# get current value
curr=$(($(df /var --output=pcent | tail -1 | cut -d% -f1) + 0))

# store current value
echo "$(date +%s) $curr" >> $datafile

# if getting worse, alert
[[ $curr > $THRESHOLD ]] && [[ $curr > $prev ]] && smsme "/var grew from ${prev}% to ${curr}%" 

这个脚本非常简单。随便问一下是否不清楚。

答案 2 :(得分:1)

几个选项

  • 如果警报表有日期列,您可以编写SQL查询以获取计数。
  • 使用bash获取值

    MAGIC_HOST