最近碰到了统版前置机无法登陆的问题,经查原来为硬盘已用空间比例过大,达到了近90%,结果就造成所有用户都无法登陆.根据这个问题,做了2个简单的脚本来提前发现这个问题.以便能及时处理.
hdtest.sh: 可由root用户将此脚本加入crontab,启动时间一般最好设为每天营业前(即每天运行一次)当此脚本启动时如检测到已用硬盘空间超过指定范围,则将hdwarning.sh脚本拷贝到指定用户根目录下;否则将删除指定用户的目录下的hdwarning.sh脚本.(即未超标便取消警告)
hdwarning.sh:如超标,该脚本在预先定义的N位用户登录进运行提示.
当指定用户登录后,若当前目录中hdwarning.sh脚本存在(一般此时硬盘已用空间已经超标),则运行此脚本,并在屏幕显示警告信息,此时终端操作人员应该及时将此信息把馈给预先指定的部门或预先指定的管理人员,以便作相应的处理.若未超标或已清理磁盘文件并达标,则将删除脚本自身hdwarning.sh(取消登录时的检测和警告信息)
usedhd=80 :超标比例默认为80,如各位做测试,可设为50或更小试试
loginnum=10:自定义最初登录反馈的用户数,默认为前 10 位,即出现超标后,只有这10位先登录的用户才有机会看到警告信息.
name="运维部" #接受反馈的部门或管理人员(^_^请各行修改,这里是我们市运维部)
tel="2113714 2110394" #接受反馈的部门或管理人员的联系方式或电话(^_^请各行修改,这里是我们市运维部电话)
userdir=/usr/scabs #前台用户的目录(默认设为我们四川统版用户),可设为其它用户或在启动时自行加入该参数
总结一下哈:*_* 目的就是通过每天营业前系统自动检测一次硬盘空间占用情况,如超标,则在前N位指定用户登录时出现警告信息,管理部门得到反馈后应该及时处理,如清理系统成功,则在下一次该用户登录时或第二天自动运行hdtest.sh时自动删掉该警告信息,
(注:hdtest.sh和hdwarning.sh应该放在/usr/bin目录下,并且应该先事先编辑指定用户的.profile,在最后加上./hdwarning.sh ,如果最后一行为启用了自动登录作业系统命令(如在统版用户.profile中最后一行为scabs,即登录后自动登录统版系统),则请./hdwarning.sh加在该命令行之前行,即超标后先出现警告再进入统版)
这2个脚本主要是给各位提供个思路,以后要是想监测什么的或是if ...then ....,可以根据这个套路来做.又讲多了,呵呵,还是感觉讲不完,还是只好由各位兄弟有兴趣的试试
hdtest.sh
#!/bin/ksh #检测硬盘剩余空间并警告的shell V050921 #四川省乐山市沙湾区邮政局 宋涛 #精简代码,改进增强 V050923
#简单说明: 可由root用户将此脚本加入crontab,启动时间一般最好设为每天营业前,当此脚本启动时如检测到已用硬盘空间超过指定范围,则将hdwarning.sh脚本拷贝到指定用户根目录下;否则将删除指定用户的目录下的hdwarning.sh脚本.
usedhd=80 #自定义超限已用硬盘空间大小比例,默认为80% test "$1" && userdir=$1 || userdir=/usr/scabs #前台用户的目录(默认设为统版用户),也可在调用此脚本时加上指定前台用户的目录参数
hdwarning=$(df -v |sed '1d;s/.$//;s/\/dev\///'|awk '$6>'"$usedhd"' {print $2," = ",$6"%"}') test "$hdwarning" && { cp /usr/bin/hdwarning.sh ${userdir}/hdwarning.sh \ > ${userdir}/hdwarning.log chmod 777 ${userdir}/hdwarning.sh ${userdir}/hdwarning.log } \ || { rm ${userdir}/hdwarning.sh 2>/dev/null \ mv ${userdir}/hdwarning.log ${userdir}/hdwarning.log.bak 2>/dev/null }
hdwarning.sh
#!/bin/ksh #检测硬盘剩余空间并警告的shell V050921 #四川省乐山市沙湾区邮政局 宋涛 #精简代码,改进增强 #增加当超标时,只在预先指定的前N位预先的指定用户登录时才显示提示信息, #即只有这前面N位用户才有可能及时反馈,避免当超标时接到过多的前台反馈电话 V050923
#请先编辑指定用户根下的 .profile ,在最后追加一行 # test -x hdwarning.sh && ./hdwarning.sh #若.profile最后已加入了自启动专用程序命令行,则请在此行前面插入上述行
#简单说明: 当指定用户登录后,若当前目录中hdwarning.sh脚本存在(一般此 #时硬盘已用空间已经超标),则运行此脚本,并在屏幕显示警告信息,此时终端 #操作人员应该及时将此信息把馈给预先指定的部门或预先指定的管理人员, #以便作相应的处理.若未超标或已清理磁盘文件并达标,则将删除脚本自身 #hdwarning.sh(取消登录时的检测和警告信息)
usedhd=80 #自定义超限已用硬盘空间大小比例,默认为80% loginnum=10 #自定义最初登录反馈的用户数,默认为前 10 位 name="运维部" #接受反馈的部门或管理人员 tel="2113714 2110394" #接受反馈的部门或管理人员的联系方式或电话 test "$1" && userdir=$1 || userdir=/usr/scabs #前台用户的目录(默认设为统版用户),也可在调用此 #脚本时加上指定前台用户的目录参数 hdwaring() { ttyname=$(tty) echo ${ttyname##*/} >> ${userdir}/hdwarning.log test $(awk 'END{print NR}' ${userdir}/hdwarning.log) -gt $loginnum && \ { rm ${userdir}/hdwarning.sh 2>/dev/null \ mv ${userdir}/hdwarning.log ${userdir}/hdwarning.log.bak 2>/dev/null } \ || { tput bold echo "\n\t"警告: $hdwarning "\n\n\t剩 余 空 间 小 于 ${usedhd}%\n\t请 及 时 整 理 硬 盘" \ echo "\n请将以上信息反馈给 ${name} ,Tel: ${tel} ,谢 谢!" echo "\n\t按任意键继续" read } }
trap "clear tput sgr0 exit " 0 1 2 3 9 15 hdwarning=$(df -v |sed '1d;s/.$//;s/\/dev\///'|awk '$6>'"$usedhd"' {print $2," = ",$6"%"}') test "$hdwarning" && hdwaring || { rm ${userdir}/hdwarning.sh 2>/dev/null \ mv ${userdir}/hdwarning.log ${userdir}/hdwarning.log.bak 2>/dev/null }
| | |