当磁盘已满时,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