更改 bash 脚本中退出代码的定义
Change definition of exit codes in bash script
我正在尝试 运行 一个简单的 bash 脚本,该脚本检查连接到 Linux 机器的卷上的可用 space,然后发送结果如果超过特定阈值,则输出任何体积。这背后的想法是监控各种服务器,以便我们在卷变满时收到通知。
我们想使用的机制是 Jenkins,所以我们需要的是一个我们可以每分钟左右 运行 的工作,并且如果任何量超过 80%,该工作就会失败。
我目前正在使用这样的脚本:
df -H | grep -vE '^Filesystem|tmpfs|cdrom' | awk '{ if ( +0 > 80 ) print " " }' | while read output;
do
echo $output
usep=$(echo $output | awk '{ print }' | cut -d'%' -f1 )
partition=$(echo $output | awk '{ print }' )
done
此脚本成功生成了我需要的输出:
83% /dev/xvda1
92% /dev/xvdb
但这就是我卡住的地方。经过大量讨论后,我得出结论,如果有任何输出,我最好的选择是导致失败——正如预期的那样,如果我将阈值提高到 95(例如),输出为空。但是,我想不出一种方法来告诉 Jenkins 这是失败的定义,因为退出状态当然是 0,Jenkins 正确地将其解释为成功。
我能否更改此设置,以便此命令在 没有输出 时退出状态为 0,在有 任何输出时退出状态为失败 ?我认为这将使我能够做我想做的事。
将输出保存到临时变量。如果它有大小,则退出并输入 return 代码。
此外,删除无关的 grep
。您已经在使用 awk
.
flag=0
while read output
do flag=1
echo "$output"
done < <( df -H | awk '
/^Filesystem|tmpfs|cdrom/ { next; }
{ if ( +0 > 50 ) print " " }'
)
exit $flag
更好,在更聪明的人的帮助下 -
df -H | awk '
/^Filesystem|tmpfs|cdrom/ { next; }
{ if ( +0 > 80 ) print " " ; exit 1; }'
我正在尝试 运行 一个简单的 bash 脚本,该脚本检查连接到 Linux 机器的卷上的可用 space,然后发送结果如果超过特定阈值,则输出任何体积。这背后的想法是监控各种服务器,以便我们在卷变满时收到通知。
我们想使用的机制是 Jenkins,所以我们需要的是一个我们可以每分钟左右 运行 的工作,并且如果任何量超过 80%,该工作就会失败。
我目前正在使用这样的脚本:
df -H | grep -vE '^Filesystem|tmpfs|cdrom' | awk '{ if ( +0 > 80 ) print " " }' | while read output;
do
echo $output
usep=$(echo $output | awk '{ print }' | cut -d'%' -f1 )
partition=$(echo $output | awk '{ print }' )
done
此脚本成功生成了我需要的输出:
83% /dev/xvda1
92% /dev/xvdb
但这就是我卡住的地方。经过大量讨论后,我得出结论,如果有任何输出,我最好的选择是导致失败——正如预期的那样,如果我将阈值提高到 95(例如),输出为空。但是,我想不出一种方法来告诉 Jenkins 这是失败的定义,因为退出状态当然是 0,Jenkins 正确地将其解释为成功。
我能否更改此设置,以便此命令在 没有输出 时退出状态为 0,在有 任何输出时退出状态为失败 ?我认为这将使我能够做我想做的事。
将输出保存到临时变量。如果它有大小,则退出并输入 return 代码。
此外,删除无关的 grep
。您已经在使用 awk
.
flag=0
while read output
do flag=1
echo "$output"
done < <( df -H | awk '
/^Filesystem|tmpfs|cdrom/ { next; }
{ if ( +0 > 50 ) print " " }'
)
exit $flag
更好,在更聪明的人的帮助下 -
df -H | awk '
/^Filesystem|tmpfs|cdrom/ { next; }
{ if ( +0 > 80 ) print " " ; exit 1; }'