我正在尝试运行一个简单的bash脚本,该脚本检查Linux计算机上连接的卷上的可用空间,然后将所有卷的结果发送到输出(如果超过特定阈值)。其背后的想法是监视各种服务器,以便在卷变满时收到通知。
我们要使用的机制是詹金斯(Jenkins),所以我们需要的是每分钟左右可以运行的工作,并且如果任何一个工作量超过80%,该工作就会失败。
此刻我正在使用这样的脚本:
df -H | grep -vE '^Filesystem|tmpfs|cdrom' | awk '{ if ( $5+0 > 80 ) print $5 " " $1 }' | while read output;
do
echo $output
usep=$(echo $output | awk '{ print $1}' | cut -d'%' -f1 )
partition=$(echo $output | awk '{ print $2 }' )
done
此脚本成功生成了我需要的输出:
83% /dev/xvda1
92% /dev/xvdb
但是这就是我被困住的地方。经过反复思考之后,我得出了最好的选择,那就是如果有任何输出会导致失败-如我所料,如果将阈值提高到95,输出为空。但是,我无法找出一种方法来告诉Jenkins这是失败的定义,因为当然退出状态为0,Jenkins正确地将其解释为意味着成功。
我是否可以更改此设置,以便如果没有没有输出,则该命令的退出状态为0,如果有任何输出,则该命令的失败状态为?我认为这将使我能够做我想做的事情。
答案 0 :(得分:3)
将输出保存到临时变量。如果尺寸合适,请退出并返回代码。
另外,删除无关的grep
。您已经在使用awk
。
flag=0
while read output
do flag=1
echo "$output"
done < <( df -H | awk '
/^Filesystem|tmpfs|cdrom/ { next; }
{ if ( $5+0 > 50 ) print $5 " " $1 }'
)
exit $flag
更好,在更聪明的人的帮助下-
df -H | awk '
/^Filesystem|tmpfs|cdrom/ { next; }
{ if ( $5+0 > 80 ) print $5 " " $1; exit 1; }'