当磁盘已满时,UNIX会收到警报

时间:2020-01-09 10:42:33  来源:igfitidea点击:

如何在UNIX和Mac OS X下磁盘已满时收到警报吗?
如何设置指定的阈值并通过cron运行脚本?

df命令报告文件系统磁盘空间使用情况,包括每个文件名自变量在文件系统上可用的磁盘空间量。
默认情况下,磁盘空间以1K块显示,除非设置了环境变量POSIXLY_CORRECT,在这种情况下使用512字节块。

使用df命令并传递-P选项,使df输出POSIX兼容(即512字节块而不是默认块。
请注意,这会覆盖环境中的BLOCKSIZE规范)。

# df -P /

或者

# df -P /usr

输出示例:

Filesystem    512-blocks     Used     Avail Capacity  Mounted on
/dev/aacd0s1e  162491344 21988048 127503992    15%    /usr

现在,您可以简单地grep/usr文件系统并打印出已使用的容量:

# df -P /usr | grep /usr | awk '{ print }' | sed 's/%//g'

15或者为变量赋值:

# output=$(df -P /usr | grep /usr | awk '{ print }' | sed 's/%//g')

# echo $output

在BASH或者KornShell下,您可以使用由数字表达式索引的数组来使代码变小:

# output=($(df -P /))

# echo "${output[11]}"

一个示例Shell脚本

#!/bin/bash
# Tested Under FreeBSD and OS X
FS="/usr"
THRESHOLD=90
OUTPUT=($(LC_ALL=C df -P ${FS}))
CURRENT=$(echo ${OUTPUT[11]} | sed 's/%//')
[ $CURRENT -gt $THRESHOLD ] && echo "$FS file system usage $CURRENT" | mail -s "$FS file system" [email protected]

如果您使用的是KSH或者TCSH/CSH而不是BASH,则需要修改语法。
保存此脚本并作为cron作业运行:

@daily /path/to/your.df.script.sh

GUI通知

使用/usr/bin/zenity显示警告对话框

#!/bin/bash
# Tested Under FreeBSD and OS X
FS="/usr"
THRESHOLD=90
OUTPUT=($(LC_ALL=C df -P ${FS}))
CURRENT=$(echo ${OUTPUT[11]} | sed 's/%//')
[ $CURRENT -gt $THRESHOLD ] && /usr/bin/zenity  --warning  --text="The disk $FS ($CURRENT% used) is almost full. Delete some files or add a new disk." --title="df Warning"

DF GUI警告通知

最后,如下更新您的cronjob(您需要使用DISPLAY变量来显示输出窗口):

36 19 * * *  DISPLAY=:0.0 /path/to/script.sh