如何使用 conf 文件中的参数来使用磁盘?
How to use parameter in conf file for disk usage?
我有这样的磁盘脚本:
#!/bin/bash
filesys=(
/
)
[ -f "$(pwd)/filesys.conf" ] && filesys=($(<$(pwd)/filesys.conf))
date=$(date +"%d\/%m\/%Y")
df -P "${filesys[@]}" |
sed -ne 's/^.* \([0-9]\+\)% \(.*\)$/'$date', , %/p' > disk.log
我有 filesys.conf 用于文件系统的工作:
/
/run
这是输出 (disk.log):
23/05/2016, /, 78%
23/05/2016, /run, 0%
问题:
我需要 filesys.conf 因为服务器文件系统总是在变化,conf 文件对我来说很容易。但是我也需要像这样在 filesys.conf 中添加 usage 参数:
/,90
/run,99
如果/
使用率大于90,/run
使用率大于99,写入日志文件。
我该怎么做?
让我们根据文件 filesys.conf 在表单 assoc[file system]=threshold
上创建一个 bash 关联数组。这样,我们可以遍历它并与 df -P
.
的输出进行比较
给定文件:
$ cat filesys.conf
/,90
/dev,25
我们将其存储在数组中(来源:Bash reading from a file to an associative array):
declare -A assoc
while IFS=, read -r -a array;
do
assoc[${array[0]}]=${array[1]}
done < filesys.conf
所以现在的值为:
$ for k in "${!assoc[@]}"; do echo "${k} --> ${assoc[$k]}"; done
/dev --> 25
/ --> 90
现在只需处理 df
的输出,例如 awk
:
mydate=$(date "+%d/%m/%Y")
for k in "${!assoc[@]}"
do
df -P "${k}" | awk 'NR==2 && $(NF-1)+0 > limit {print date, fs, $(NF-1)}' OFS=, fs="$k" date=mydate limit="${assoc[$k]}"
done >> disk.log
此管道 df
到 awk
。在那里,我们检查第二行(第一行是 header,显然不能从输出中删除(man df
没有提到它)),在那里,倒数第二列的值.如果它的值大于给定的阈值,我们打印所需的输出。
注意 $(NF-1)+0
将 Use%
列转换为 int 的技巧:格式 13%
被转换为 13
.
我有这样的磁盘脚本:
#!/bin/bash
filesys=(
/
)
[ -f "$(pwd)/filesys.conf" ] && filesys=($(<$(pwd)/filesys.conf))
date=$(date +"%d\/%m\/%Y")
df -P "${filesys[@]}" |
sed -ne 's/^.* \([0-9]\+\)% \(.*\)$/'$date', , %/p' > disk.log
我有 filesys.conf 用于文件系统的工作:
/
/run
这是输出 (disk.log):
23/05/2016, /, 78%
23/05/2016, /run, 0%
问题:
我需要 filesys.conf 因为服务器文件系统总是在变化,conf 文件对我来说很容易。但是我也需要像这样在 filesys.conf 中添加 usage 参数:
/,90
/run,99
如果/
使用率大于90,/run
使用率大于99,写入日志文件。
我该怎么做?
让我们根据文件 filesys.conf 在表单 assoc[file system]=threshold
上创建一个 bash 关联数组。这样,我们可以遍历它并与 df -P
.
给定文件:
$ cat filesys.conf
/,90
/dev,25
我们将其存储在数组中(来源:Bash reading from a file to an associative array):
declare -A assoc
while IFS=, read -r -a array;
do
assoc[${array[0]}]=${array[1]}
done < filesys.conf
所以现在的值为:
$ for k in "${!assoc[@]}"; do echo "${k} --> ${assoc[$k]}"; done
/dev --> 25
/ --> 90
现在只需处理 df
的输出,例如 awk
:
mydate=$(date "+%d/%m/%Y")
for k in "${!assoc[@]}"
do
df -P "${k}" | awk 'NR==2 && $(NF-1)+0 > limit {print date, fs, $(NF-1)}' OFS=, fs="$k" date=mydate limit="${assoc[$k]}"
done >> disk.log
此管道 df
到 awk
。在那里,我们检查第二行(第一行是 header,显然不能从输出中删除(man df
没有提到它)),在那里,倒数第二列的值.如果它的值大于给定的阈值,我们打印所需的输出。
注意 $(NF-1)+0
将 Use%
列转换为 int 的技巧:格式 13%
被转换为 13
.