BAT调用SECURECRT的VBS脚本功能自动化LINUX系统健康检查
最近负责管理的LINUX系统比较多,每天每台服务器登录检查一遍很烦。就用BAT调用SECURECRT的VBS
脚本,自动对所有服务器做自动检查。
为了便于修改检查脚本,LINUX检查脚本保存在本地,每次检查时,利用SECURECRT的SFTP功能上传到
系统上,每次检查后再将检查日志下载到本地。
Srv.list主机列表文件
需要检查的系统保存在svr.list文件中,文件格式为
服务器的IP地址,SSH端口号,主机名
为了方便选择需要检查的系统,有三个文件srv.list, srvPRD.list,srvALL.list,可以通过BAT的参数选择不同
的服务器列表。
Dailycheck.bat
Dailycheck.bat是系统执行系统检查时的启动脚本,可以输入一个参数选择需要检查的服务器列给
C:\>dailycheck.bat ‐‐ 不加参数,检查svr.list中的服务器
C:\>dailycheck.bat PRD ‐‐ 检查svrPRD.list中的服务器
C:\>dailycheck.bat ALL ‐‐ 检查svrALL.list 中的服务器
Dailycheck.bat 从srv.list中读取服务器的IP地址,SSH端口号,主机名称,和用户名名、密码一起传入SECURECRT,SECURENT再执行VBS脚本dailycheck.vbs
REM DAILYCheck.bat
@echo off
Setlocal ENABLEDELAYEDEXPANSION
Set strDate=%date:~6,4%%date:~0,2%%date:~3,2%
Set Checklog=d:\OScheck\os_dailycheck_%strDate%.log
Set checkDir=d:\OSCheck\%strDate%
REM
====================================================================================================== set SvrList=d:\OSCheck\svr.list
if "%1" == "PRD" (
set SvrList=d:\OSCheck\svrPrd.list
set Set Checklog=d:\OScheck\os_dailycheck_%strDate%_PRD.log
)
if "%1" == "ALL" (
set SvrList=D:\OSCheck\svrAll.list
Set Checklog=d:\OScheck\os_dailycheck_%strDate%_ALL.log
)
REM – 为了安全每次执行时输入用户名和密码,如果不想这么麻烦,可以直接设置好用户名和密码。
Set /P Username=Please UserName:
Set /P Password=Please Password:
echo :::Start OS Daily checking for %1 on %date% >> %checklog%
For /F "tokens=1,2,3 delims=," %%i in (%SvrList%) do (
echo %date%:: %%k :: %%i >> %checklog%
"C:\Program Files\VanDyke Software\SecureCRT\securecrt.exe" /titlebar "OSCheck:%%k:%%i" /NOMENU /NOTOOLBAR /SCR /ARG %UserName% /ARG %Password% /ARG %%i /ARG %%j
REM – 检查完毕后将下载到本地的检查日志移到一个目录中。
if not exist %CheckDir% mkdir %CheckDir%
Move /Y d:\OSCheck\*.log %checkDir%
exit)
Dailycheck.vbs
Dailycheck.vbs执行3部分任务:
1.将系统检查脚本oscheck.sh上传到服务器
2.在服务器上执行系统检查脚本oscheck.sh
3.将检查日志下载到本地。
# $language = "VBScript"
# $interface = "1.0"
Sub Main
dim objTab, objSFTPTab
dim strHost, strUserid, strUserPwd, strRootPwd, strPort
dim strConnect
IF crt.arguments.count <> 4 then
crt.Daiglog.MessageBox("No Enough Paratmeters!")
crt.quit
exit sub
ELSE
strUserid = crt.arguments(0)
strUserPwd = crt.arguments(1)
strHost = crt.arguments(2)
strPort = crt.arguments(3)
END IF
'====================================================================================================== 'Connect to a host and start OS check daily
strConnect="/SSH2 /P " & strPort & " /L " & strUserId & " /PASSWORD " & strUserPwd & " " & strHost
set objTab=crt.session.connectInTab(strConnect)
objTab.screen.synchronous = True
'Create an SFTP tab associated with the existing tab
set objSFTPTab=objTab.connectSFTP
'Wait for the SFTP tab to be ready for input
objSFTPTab.screen.synchronous = True
crt.Sleep 300
objSFTPTab.screen.Send vbcr
objSFTPTab.Screen.WaitForString "sftp>"
' Upload oscheck.sh in d:\OSCheck to remote working Directory /OSCheck/
objSFTPTab.Screen.Send "put ‐b oscheck.sh" & vbcrlf
objSFTPTab.screen.WaitForString "sftp>"
objTab.activate()
objTab.screen.send("sudo ‐K") & chr(13)
crt.sleep 10
objTab.screen.send("sudo su ‐") & chr(13)
ObjTab.screen.waitforstring("[sudo]")
ObjTab.screen.send(strUserPwd) & chr(13)
objTab.screen.waitforstring("#")
objTab.screen.send("cd /OSCheck/") & chr(13)
objTab.screen.waitforstring("Check")
objTab.Screen.send("rm ‐f /OSCheck/*.log ; echo r000") & chr(13)
objTab.Screen.waitForString("r000")
objTab.screen.send("sh ./oscheck.sh") & chr(13)
objTab.screen.waitforstring("successfully")
objSFTPTab.activate()
' download the check log to d:\OSCheck from remote working Directory /OSCheck
objSFTPTab.Screen.Send ("get ‐b *.log" ) & vbcrlf
objSFTPTab.screen.WaitForString "sftp>"
'Close the SFTPTab
objSFTPTab.screen.send ("exit") & vbcrlf
objTab.activate()
objTab.screen.send("exit") & chr(13)
objTab.Screen.WaitForString("$")
objTab.Session.Disconnect
'objTab.close
'Done, quit SecureCRT
crt.quit
End Sub
Oscheck.sh
Oscheck.sh是统一的系统监控检测脚本。主要功能
1.收集系统配置信息,将配置信息记录到配置日志中
2.系统健康检查,如有报警将报警写到检查日志中。
3.比较两次检查的系统配置,如果有变动,将变动写到检查日志中
4.如果有本地检查脚本,执行一些服务器的特殊检查。
Oscheck.sh会产生3个日志。detail, config, check。Detail 中记录了本次检查的详细结果,config是系统的
配置问,check是每次执行完脚本需要检查的日志文件,如果大小为0,这台服务器就不用关注了。这个
脚本是一点点加的,每次想到一点加一点,结构不是很好,凑活做参考吧。
#!/bin/sh
#================================================================================================ # This Scripts is used to collect Linux Configuration Data and health check daily.
#
#================================================================================================ # -----------------------------------------------------------------------------------------------# Part 1 - Get the Basic Information
# Part 2 - Get the Detail Information
# Section 1 - System Information
# Section 2 - Filesystem Information
# Section 3 - VG Information
# Section 4 - Services Configuration
# Section 5 - The last 40 lines in syslog
# Section 6 - Root's Mail
# Section 7 - Login History since Last Day
# Section 8 - Root Crontab and Error Log
# Section 9 - Check Process
# Section 10 - Network Information
# Section 11 - Software Information
# Part 3 - Check OVO Process
# Part 4 - Check System Performance
# Part 5 - run local check scripts if available
# -----------------------------------------------------------------------------------------------
LOGFILE=detail.`hostname`.`date +"%y%m%d"`.log
ConfFile=conf.`hostname`.`date +"%y%m%d"`.log
CheckLog=check.`hostname`.`date +"%y%m%d"`.log
userid=`whoami`
CheckDir="/OSCheck"
SectionN=0
FSThreshold=90
CPUThreshold=50
SWAPThreshold=30
cd $CheckDir
# =============================================================================================== # Preapre the output file
#
cp -f /dev/null $LOGFILE
cp -f /dev/null $ConfFile
cp -f /dev/null $CheckLog
if [ `id|cut -c1-6` != "uid=0(" ] ; then
echo "This script must run as root!" >> $CheckLog
echo "Script end unsuccessfully!"
eit 1
fi
# Check Linux Distribution
distrib="unknown"
if [ -f /etc/debian_version ] ; then
if [ -f /etc/lsb-release ] ; then
UBUNTU_VERSION=$(awk -F\" '/DISTRIB_DESCRIPTION/ {print $2}' /etc/lsb-release) fi
if [ "$UBUNTU_VERSION" ]; then
distrib=$UBUNTU_VERSION
UBUNTU="yes"
else
distrib="Debian GNU/Linux Version `cat /etc/debian_version`"
UBUNTU="no"
fi
DEBIAN="yes"
else
DEBIAN="no"
fi
if [ -f /etc/SuSE-release ] ; then
distrib="`head -1 /etc/SuSE-release`"
SUSE="yes"
else
SUSE="no"
fi
if [ -f /etc/redhat-release ] ; then
distrib="`head -1 /etc/redhat-release`"
REDHAT="yes"
else
REDHAT="no"
fi
HostName=`hostname -f`
IPAddress=`ifconfig | grep "inet addr" | grep -v "127.0.0.1" | awk -F: '{print $2}' | awk '{print KernelVer=`uname -r`
CPUNum=`cat /proc/cpuinfo | grep "processor" | wc -l `
CPUMHz=`cat /proc/cpuinfo | grep MHz | uniq | awk -F: '{print $2}'`
MemTotal=`grep MemTotal /proc/meminfo|awk -F: '{print $2}'`
MemFree=`grep MemFre /proc/meminfo |awk -F: '{print $2}'`
#================================================================================================ # Part 1 : Get the Basic Information
#================================================================================================ #
echo "============================== Part 1 : Basic Information ================================= echo "System OS Health Check Date : " `date +%Y%m%d` >> $LOGFILE
echo "Hostname : " $HostName >>$LOGFILE
echo "Hostname : " $HostName >>$ConfFile
echo "IP address : " $IPAddress >>$LOGFILE
echo "IP address : " $IPAddress >>$ConfFile
echo "OS Version : " $distrib >>$LOGFILE
echo "OS Version : " $distrib >>$ConfFile
echo "OS Kernel Version : " $KernelVer >>$LOGFILE
echo "OS Kernel Version : " $KernelVer >>$ConfFile
echo "Processor Number : " $CPUNum >>$LOGFILE
echo "Processor Number : " $CPUNum >>$ConfFile
echo "Processsor CPU MHz : " $CPUMHz >>$LOGFILE
echo "Total Memory : " $MemTotal >>$LOGFILE
echo "Total Memory : " $MemTotal >>$ConfFile
echo "Free Memroy : " $MemFree >>$LOGFILE
echo "System Uptime : " `uptime | awk -F, '{print $1,$2}'` >>$LOG
Upday=`uptime | awk '{print $3}'`
if [ $Upday -lt 1 ]
then
echo $Upday >> $CheckLog
echo "Server is reboot recently, please have a check " >> $CheckLog
fi
#================================================================================================ # Part 2 : Get the Detail Information
#================================================================================================ #
echo "============================== Part 2 : Detail Information =============================== #
echo "-------------------------------------------------------------------------------------------SectionN=`expr $SectionN + 1`
echo "Section $SectionN - OS Specific Release Information:" >>$LOGFILE
echo "Section $SectionN - OS Specific Release Information:" >>$ConfFile
if [ -x /usr/bin/lsb_release ]
then
/usr/bin/lsb_release -a >> $LOGFILE 2>/dev/null
/usr/bin/lsb_release -a >> $ConfFile 2>/dev/null
else
echo "Linux Standard Base Verion " >> $LOGFILE
echo "Linux Standard Base Verion " >> $ConfFile
fi
#
echo "-------------------------------------------------------------------------------------------SectionN=`expr $SectionN + 1`
echo "Section $SectionN - System Infomation:" >>$LOGFILE
echo "CPU and Model Info:" >> $LOGFILE
cat /proc/cpuinfo >> $LOGFILE
echo "" >> $LOGFILE
echo "System Ulimit:" >> $LOGFILE
ulimit -a >> $LOGFILE
echo "" >> $ConfFile
echo " System Ulimit:" >> $ConfFile
ulimit -a >> $ConfFile
echo "" >> $LOGFILE
echo "Hardware Info:" >> $LOGFILE
dmidecode >>$LOGFILE 2>/dev/null
echo " " >>$LOGFILE
echo "-------------------------------------------------------------------------------------------SectionN=`expr $SectionN + 1`
echo "Section $SectionN - Filesystem Infomation:" >>$LOGFILE
echo "Filesystem and Usage : " >> $LOGFILE
df -hlP >>$LOGFILE 2>/dev/null
echo " " >>$LOGFILE
echo "Local MountPoints:" >> $ConfFile
mount >> $ConfFile
echo " " >>$ConfFile
echo "FileSystemSystem Tab: " >> $ConfFile
cat /etc/fstab >> $ConfFile
echo "" >> $ConfFile
echo "NFS Filesystems: " >> $ConfFile
grep -vE '^#|^ *$' /etc/exports >> $ConfFile
# check if mounted Filesystem varied?
mount > mount.now
if [ -f mount.ref ] ; then
diff mount.now mount.ref > mount.diff
if [ `cat mount.diff | wc -l` -gt 0 ] ; then
echo " The mounted filesystem varied! " >> $CheckLog
fi
mv -f mount.now mount.ref
else
mv -f mount.now mount.ref
fi
echo " " >> $ConfFile
echo " FilesysteUtiliationa are: " >> $ConfFile
# *************************************************************************************** # * remove the used and available field from df output on 2013/01/06
# *************************************************************************************** # * df -lhP >> $ConfFile
# *
df -lhP | awk '{print $1,$2,$5,$7}' >> $ConfFile
# check if utilization of Filesystem exceed the threshold!
DF_Out=`df -lhP | grep -v "^/dev/hdc"|grep -v ":" | awk '{print $5}' | sed '1d' | sed s/% Num=0
for Line in $DF_Out
do
if [ `echo "$Line>$FSThreshold"|bc` -eq 1 ] ; then
Num=`expr $Num + 1`
fi
done
if [ $Num -gt 0 ] ; then
echo " There are $Num filesystem exceed the Threshold " >> $CheckLog
fi
#Check if /etc/fstab be modified
if [ -f fstab.ref ] ; then
diff /etc/fstab fstab.ref > fstab.diff
if [ `cat fstab.diff | wc -l` -gt 0 ] ; then
echo "File /etc/fstab has been modified!" >> $CheckLog
fi
cp -f /etc/fstab fstab.ref
else
cp /etc/fstab fstab.ref
fi
echo "Disk Partition:" >> $LOGFILE
if [ -x /sbin/fdisk ]
then
if [ -x /sbin/parted ]
then
for i in $(fdisk -l 2>/dev/null | grep "^Disk " | grep "/dev/"|cut -f1 -d:|cut -f2 -d" do
/sbin/parted -s $i print >> $LOGFILE 2>/dev/null
done
else
/sbin/fdisk -l >> $LOGFILE
fi
fi
echo " " >>$LOGFILE
echo "-------------------------------------------------------------------------------------------
SectionN=`expr $SectionN + 1`
echo "Section $SectionN - VG Information : " >> $LOGFILE
vgdisplay -v >> $LOGFILE 2>/dev/null
echo " " >>$LOGFILE
echo " Report Logical Volume inforation: " >> $ConfFile
lvs >> $ConfFile 2>/dev/null
echo "" >>$ConfFile
echo " Report Pyschial Volume Information: " >> $ConfFile
pvs >> $ConfFile 2>/dev/null
echo "" >>$ConfFile
echo " Report Volume Group Information: " >> $ConfFile
vgs >> $ConfFile 2>/dev/null
echo " " >> $LOGFILE
echo "-------------------------------------------------------------------------------------------SectionN=`expr $SectionN + 1`
echo "Section $SectionN - Services Configuration: " >> $LOGFILE
if [ -x /sbin/chkconfig ] ; then
echo "Services Startup : " >> $LOGFILE
/sbin/chkconfig --list >> $LOGFILE
fi
echo " " >> $LOGFILE
echo "-------------------------------------------------------------------------------------------SectionN=`expr $SectionN + 1`
echo "Section $SectionN - System Log: " >> $LOGFILE
if [ -r /var/log/messages ]
then
# ******************************************************************************************** # * Modified on 2013/01/06
# * output the messages of the last day
# ******************************************************************************************** # *
# echo "Last 40 Lines of /var/log/message: " >> $LOGFILE
# tail -n 40 /var/log/messages >>$LOGFILE
#
LDate=`tail -1 /var/log/messages | cut -c 1-6`
cmdGetLog="grep \"$LDate\" /var/log/messages"
eval $cmdGetLog >> $LOGFILE
fi
if [ -x /bin/dmesg ]
then
echo "Last 40 lines of dmesg: " >> $LOGFILE
/bin/dmesg | tail -n 40 >> $LOGFILE
fi
echo " " >> $LOGFILE
echo "-------------------------------------------------------------------------------------------SectionN=`expr $SectionN + 1`
echo "Section $SectionN - Show root's mail: " >> $LOGFILE
if [ -r /var/spool/mail/root ]
then
cat /var/spool/mail/root > mail.now
if [ -f mail.ref ]
then
diff -e mail.ref mail.now | awk 'NR>1 {print $0}' >> $LOGFILE 2>/dev/null
mv -f mail.now mail.ref
else
mv mail.now mail.ref
fi
fi
echo "" >> $LOGFILE
echo "-------------------------------------------------------------------------------------------SectionN=`expr $SectionN + 1`
echo "Section $SectionN - Show User Login History Since Last Day: " >> $LOGFILE
last > last.now 2>/dev/null
diff -e last.ref last.now | awk 'NR>1 {print $0}' >> $LOGFILE
mv last.now last.ref
echo "" >> $LOGFILE
echo "-------------------------------------------------------------------------------------------SectionN=`expr $SectionN + 1`
echo "Section $SectionN - Root Crontab and Error Log: " >> $LOGFILE
if [ "$SUSE" = "yes" ] ; then
usercron="/var/spool/cron/tabs"
fi
if [ "$REDHAT" = "yes" ] ; then
usercron="/var/spool/cron"
fi
if [ "$DEBIAN" = "yes" ] ; then
usercron="/var/spool/cron/crontabs"
fi
ls $usercron/root > /dev/null 2>&1
if [ $? -eq 0 ]
then
echo "Root Crontab :" >> $ConfFile
cat $usercron/root >> $ConfFile
else
echo "No crontab files for root" >> $LOGFILE
fi
ls /var/log/cron > /dev/null 2>&1
if [ $? -eq 0 ]
then
echo "Last 40 lines in cron log:" >> $LOGFILE
tail -n 40 /var/log/cron >>$LOGFILE
fi
echo "" >> $LOGFILE
echo "-------------------------------------------------------------------------------------------SectionN=`expr $SectionN + 1`
echo "Section $SectionN - Check Process:" >> $LOGFILE
echo "Active Process Overview" >> $LOGFILE
/usr/bin/pstree -p -a -l -G -A >> $LOGFILE 2>/dev/null
echo " Top Load Process : " >> $LOGFILE
ps -ef | cut -c39- | sort -nr | head -20 | awk '{printf("%10s %s\n", $1, $2)}' >> $LOGFILE echo "Top Memory Consuming process:" >> $LOGFILE
ps -e -o 'vsz pid ruser cpu time args' |sort -nr|head -20 >> $LOGFILE
NumOfProcess=`ps -efl | wc -l`
echo "$NumOfProcess processes are running" >> $LOGFILE
NumOfDead=`ps -ef | grep defunc | grep -v "grep" | wc -l`
if [ $NumOfDead -gt 0 ]
then
echo "$NumOfDead processes were dead" >> $CheckLog
fi
echo "" >> $LOGFILE
echo "-------------------------------------------------------------------------------------------SectionN=`expr $SectionN + 1`
echo "Section $SectionN - Network Information:" >> $LOGFILE
echo "Network Settings:" >> $LOGFILE
/sbin/ifconfig >> $LOGFILE
if [ "$REDHAT" = "yes" ] ; then
echo " Network Service status: " >> $LOGFILE
service network status >> $LOGFILE
fi
echo " Network Intface configruation: " >> $LOGFILE
ifconfig >> $LOGFILE 2>/dev/null
netstat -in >> $LOGFILE 2>/dev/null
netstat -rn >> $LOGFILE 2>/dev/null
# netstat -ntapl >> $LOGFILE 2>/dev/null
echo "" >> $ConfFile
echo "IP Address: " >> $ConfFile
ip addr >> $ConfFile
echo "" >> $ConfFile
echo "Route Settings: " >> $ConfFile
netstat -rn >> $ConfFile
echo "" >> $ConfFile
echo "NTP Settings: " >> $ConfFile
grep -vE '^#|^ *$' /etc/ntp.conf >> $ConfFile
echo "" >> $ConfFile
echo "SSHD Settings: " >> $ConfFile
grep -vE '^#|^ *$' /etc/ssh/sshd_config >> $ConfFile
echo "" >> $ConfFile
echo "SSH Settings: " >> $ConfFile
grep -vE '^#|^ *$' /etc/ssh/ssh_config >> $ConfFile
echo "" >> $LOGFILE
echo "-------------------------------------------------------------------------------------------SectionN=`expr $SectionN + 1`
echo "Section $SectionN - Software Information:" >> $LOGFILE
# REDHAT
if [ "$REDHAT" = "yes" ] ; then
echo " Installed Packages: " >> $LOGFILE
rpm -qa | sort -d -f >> $LOGFILE
fi
# end REDHAT
# SUSE
if [ "$SUSE" = "yes" ] ; then
echo "Installed Packages: " >> $LOGFILE
rpm -qa | soft -d -f >> $LOGFILE
fi
# end SUSE
# Debian
if [ "$DEBIAN" = "yes" ] ; then
echo "Installed Packages: " >> $LOGFILE
dpkg --get-selections | awk '!/deinstall/ {print $1}' >> $LOGFILE
echo "Miconfigured Packages:" >> $LOGFILE
dpkg -C >> $LOGFILE
echo "Detail list of installed Packages: " >> $LOGFILE
dpkg -l >> $LOGFILE
fi
# end Debian
#
echo "" >> $LOGFILE
#================================================================================================ # Part 3 : Check OVO Processes
#================================================================================================ #
echo "============================== Part 3 : Check OVO Processes
=============================================================" >>$LOGFILE
#
echo "OVO Checking:" >> $LOGFILE
if [ -x /opt/OV/bin/ovc ]
then
/opt/OV/bin/ovc > ovoa.tmp
cat ovoa.tmp >> $LOGFILE
NumofProcess=`cat ovoa.tmp | wc -l`
NumofRunning=`cat ovoa.tmp | grep Running | wc -l`
if [ $NumofProcess -ne $NumofRunning ]
then
echo "There are some ovoa process is not running" >> $CheckLog
fi
if [ $NumofProcess -le 4 ]
then
echo "Less of OVOA processes is running" >> $CheckLog
fi
/opt/OV/bin/ovpolicy -list > ovpolicy.tmp
cat ovpolicy.tmp >> $LOGFILE
Numofenable=`cat ovpolicy.tmp | grep enabled | wc -l`
if [ $Numofenable -le 10 ]
then
echo "The monitor policies are less than 10" >> $CheckLog
fi
NumofDisable=`cat ovpolicy.tmp | grep disable | wc -l`
if [ $NumofDisable -ge 1 ]
then
echo "There are $NumofDisable moitoring policies disabled" >> $CheckLog
fi
#else
# echo "No OVOA is installed!" >> $CheckLog
fi
echo "" >> $LOGFILE
echo "OV Performance: " >> $LOGFILE
if [ -x /opt/perf/bin/perfstat ]
then
/opt/perf/bin/perfstat > ovpa.tmp
cat ovpa.tmp >> $LOGFILE
NumofWarning=`cat ovpa.tmp | grep -i WARNING | grep -v grep | wc -l`
if [ $NumofWarning -ge 1 ]
then
echo "There are some OV Performance process is not running" >> $CheckLog
fi
fi
echo "" >> $LOGFILE
#================================================================================================ # Part 4 : Performance
#================================================================================================ #
echo "============================== Part 4 : Performance Information
========================================================" >>$LOGFILE
echo "------------------------------ Performance Checking ---------------------------------------#
if [ -x /usr/bin/vmstat ] ; then
echo "VM-Statistics: " >> $LOGFILE
/usr/bin/vmstat 3 10 >> $LOGFILE 2>/dev/null
echo "VM-Statistics Summary:" >> $LOGFILE
/usr/bin/vmstat -dn >> $LOGFILE 2>/dev/null
/usr/bin/vmstat -f >> $LOGFILE 2>/dev/null
fi
if [ -x /usr/bin/mpstat ] ; then
echo "MP-Statistics: " >> $LOGFILE
/usr/bin/mpstat 3 10 >> $LOGFILE 2>/dev/null
fi
if [ -x /usr/bin/iostat ] ; then
echo "IO-Statistics:" >> $LOGFILE
/usr/bin/iostat 3 10 >> $LOGFILE 2>/dev/null
fi
if [ -x /usr/bin/free ] ; then
echo "RAM/SWAP Statistics:" >> $LOGFILE
/usr/bin/free -l >> $LOGFILE
fi
if [ -e /proc/sysvipc ] ; then
echo " IPC status : " >> $LOGFILE
ipcs >> $LOGFILE
echo "IPC Summary: " >> $LOGFILE
ipcs -u >> $LOGFILE
echo "IPC Limits:" >> $LOGFILE
ipcs -l >> $LOGFILE
fi
# ******************************************************************************* # Modify the following lines on 2012/05/07
#
# # Check the CPU utilization if exceed the threshold
# CPUUtil=`uptime | awk -F "average:" '{print $2}' | awk -F, '{print $1}'`
# echo "Current CPU utilization is : " $CPUUtil >> $LOGFILE
# if [ `echo "$CPUUtil>$CPUThreshold"|bc` -eq 1 ]
# then
# echo "CPU utilization is " $CPUUtil " exceed the threshold" >> $CheckLog
# fi
if [ -x /usr/sbin/sar ]
then
CPUUtil=`/usr/sbin/sar -u 1 10 | awk '/Average/ { print ( $3 + $5 ) }'`
echo "Current CPU utilization is : " $CPUUtil >> $LOGFILE
if [ `echo "$CPUUtil>$CPUThreshold"|bc` -eq 1 ]
then
echo "CPU utilization is " $CPUUtil " exceed the threshold" >> $CheckLog fi
fi
# Check the SWAP utilization if exceed the threshold
SWAPUsed=`free -m | grep Swap | awk '{print $3}'`
SWAPTotal=`free -m | grep Swap | awk '{print $2}'`
SWAPUtil=`echo "scale=2; $SWAPUsed/$SWAPTotal"|bc`
echo "Current SWAP utilization is : " $SWAPUtil >> $LOGFILE
if [ `echo "$SWAPUtil>$SWAPThreshold"|bc` -eq 1 ]
then
echo "SWAP utilization is " $SWAPUtil " ,exceed the threshold" >> $CheckLog
fi
# *********************************************************************************************** # Add Part 5 for running local check scripts if available on 2013/01/06
#
echo "============================== Part 5 : Run Local Check scripts
=======================================================" >>$LOGFILE
if [ -f "/OSCheck/localchk.sh" ]
then
echo "Local check scripting is running " >> $LOGFILE
chkcmd="/bin/sh localchk.sh $LOGFILE $CheckLog"
eval $chkcmd
echo "--- End of running of local check scripts " >> $LOGFILE
fi
#================================================================================
# Check if the system configuration was changed!
if [ -f osconf.ref ]
then
diff $ConfFile osconf.ref > osconf.diff
if [ `cat osconf.diff | wc -l` -gt 0 ]
then
echo "The System Confiruation was changed, have a check!" >> $CheckLog
cat osconf.diff >> $CheckLog
fi
cp -f $ConfFile osconf.ref
else
cp -f $ConfFile osconf.ref
fi
echo "Checking finished successfully!"
VBS代码片断大全[一] 1 VBS 取得本机IP strComputer = "." Set objWMIService = GetObject("winmgmts:\" & strComputer & "\root\cimv2") Set IPConfigSet = objWMIService.ExecQuery("Select IPAddress from Win32_NetworkAdapterConfiguration Where IPEnabled=TRUE") For Each IPConfig in IPConfigSet If Not IsNull(IPConfig.IPAddress) Then For Each strAddress in IPConfig.IPAddress WScript.Echo strAddress Next End If Next -------------------------------------------------------------------------------- 2 取得本机计算机名 strComputer = "." Set objWMIService = GetObject("winmgmts:\" & strComputer & "\root\cimv2") Set colComputers = objWMIService.ExecQuery("Select * from Win32_ComputerSystem") For Each objComputer in colComputers Wscript.Echo https://www.doczj.com/doc/1f10729694.html, Next -------------------------------------------------------------------------------- 4 检查升级包 strComputer = "." Set objWMIService = GetObject("winmgmts:\" & strComputer & "\root\cimv2") Set colOperatingSystems = objWMIService.ExecQuery("Select * from Win32_OperatingSystem") For Each objOperatingSystem in colOperatingSystems Wscript.Echo objOperatingSystem.ServicePackMajorVersion & "." & objOperatingSystem.ServicePackMinorVersion Next -------------------------------------------------------------------------------- 5 检查Hot Fix strComputer = "." Set objWMIService = GetObject("winmgmts:\" & strComputer & "\root\cimv2") Set colQuickFixes = objWMIService.ExecQuery ("Select * from Win32_QuickFixEngineering") For Each objQuickFix in colQuickFixes Wscript.Echo "Description: " & objQuickFix.Description
◎Vbs脚本编程简明教程之一—为什么要使用Vbs? 在Windows中,学习计算机操作也许很简单,但是很多计算机工作是重复性劳动,例如你每周也许需要对一些计算机文件进行复制、粘贴、改名、删除,也许你每天启动计算机第一件事情就是打开WORD,切换到你喜爱的输入法进行文本编辑,同时还要播放优美的音乐给工作创造一个舒心的环境,当然也有可能你经常需要对文本中的某些数据进行整理,把各式各样的数据按照某种规则排列起来……。这些事情重复、琐碎,使人容易疲劳。 第三方软件也许可以强化计算机的某些功能,但是解决这些重复劳动往往事倍功半,我也尝试过使用计算机语言编写程序来解决这些问题,但是随之而来的命令、语法、算法、系统框架和类库常常让我觉得这样是否有必要,难道就是因为猪毛比较难拔,所以我就要去学习机械,为自己设计一个拔猪毛机(?)吗? Vbs是一种Windows脚本,它的全称是:Microsoft Visual Basic Script Editon.(微软公司可视化BASIC脚本版),VBS是Visual Basic的的一个抽象子集,是系统内置的,用它编写的脚本代码不能编译成二进制文件,直接由Windows系统执行(实际是一个叫做宿主host的解释源代码并执行),高效、易学,但是大部分高级语言能干的事情,它基本上都具备,它可以使各种各样的任务自动化,可以使你从重复琐碎的工作中解脱出来,极大的提高工作效率。我个人认为Vbs脚本其实就是一种计算机编程语言,但是由于缺少计算机程序设计语言中的部分要素,对于事件的描述能力较弱,所以称为脚本,它最方便的地方就是提供了对COM 对象的简便支持。那么什么是COM对象呢? 我这样理解,COM对象就是一些具有特定函数功能项程序模块,他们一般以ocx或者dll 作为扩展名,你只要找到包含有你需要的功能的模块文件,并在脚本中规范的引用,就可以实现特定的功能,也就是说Vbs脚本就是调用现成的“控件”作为对象,用对象的属性和方法实现目的,完全免去了编写代码、设计算法等等麻烦。说白了,我不是觉得拔猪毛麻烦么?我发觉xx机(比如真空离心器)有一个功能可以实现脱毛,ok,我把它拿来给猪脱毛。什么?大材小用?太浪费资源了?天哪,那是计算机芯片的事情,死道友不死贫道,反正我的事情是方便快速的解决了,这就行了。 最方便的是它甚至不需要专门的开发环境,在你的计算机中,只要有notepad,就可以编写Vbs脚本了,并且可以直接执行。 Vbs脚本编程简明教程之二—如何开始第一个Vbs脚本? 就像多数计算机教程一样,我们从“Hello World!”程序开始我们的练习。什么?不知道是什么意思?就是说大部分的计算机程序设计教程开篇入门都是编写一个小程序,执行这个程序的结果就是在计算机的屏幕上或者dos窗口中显示一行文字:Hello World!好了,我们开始吧。 打开你的“记事本”程序,在编辑窗口填写: msgbox "Hello World!" 然后用鼠标单击“文件”菜单,单击“保存”,把“保存在”一栏设为桌面,在“文件名”一栏中填写kk.vbs,单击“保存”就可以了。然后最小化“记事本”窗口,在桌面上寻找你刚刚保存的kk.vbs,然后双击。看到弹出的对话框了没有,单击“确定”,对话框消失了。难看了点,不过确实是你编写的第一个脚本程序。 说明之一:上面的操作中,保存位置放在桌面,仅仅是为了执行方便,你保存到其他的地方完全没有问题,只要你知道你保存在什么地方就可以了,什么?是废话,自己保存的当然知道保存在那里了。不,自己保存的文件自己找不到的人我见的多了去了。文件名你可以随意填写,不一定非要写kk,只要符合Windows的文件命名规则就可以了,但是扩展名必须是vbs,什么?不知道什么是扩展名?就是文件名中“.”后的那部分,简单说,就是vbs脚本文件命名时必须是:xxx.vbs,其中xxx你随意。
◎感谢钱峰2007年05月13日星期日下午04:26学习Vbs,当然是看微软网站上推出的官方教程比较原汁原味,可惜中国vbs学友里看过的恐怕不多,原因很简单,微软的官方原著是英文版的,看起来很费力。 当时,我刚刚发现vbs的妙处,可是除了一本微软的《Microsoft Windows脚本技术.CHM》之外,什么学习资料也找不到,看到网上介绍有一本《windows2000脚本编程实用大全》的书,就跑到各个书店去订书,因为出版的时间太久了,那里都订不到,又跑到各个技术网站上去发帖,希望那位有电子版给我发一份,我愿意用其他方面的技术资料交换,结果如同石沉大海,一点消息也没有,在这里小小鄙视他们一下。 后来偶然在网络上遇到钱峰先生,慷慨赠送了他翻译的微软的官方教程给我,让我迈进了vbs的大门,真是惭愧,由于计算机感染病毒,钱峰先生的邮件地址我也找不到了,只有他的一个qq号码,却从来不见他上线,多次留言,也没有见到他回应,在此对钱峰先生的翻译工作及无偿赠予表示衷心的感谢! 今后一段时间,我将逐步将钱峰先生翻译的微软官方教程贴出,与大家共同温习。 有英文好的朋友可能会发觉这份翻印的教程与微软官方原版并不是完全相同,一是因为钱峰先生翻译的时候大约并没有想到要出版或者与人交流,仅仅是自己学习,所以翻译的比较粗糙,我刚刚得到的时候,很多地方都看的不是很懂,在与微软英文官方教程比较后,按照自己的理解修改了其中的一部分(对其中的有些地方,其实到现在我也还是弄不明白);二是因为外国人行文和思维的方式与中国人有着很大的差别,读起来颇为费力,所以我对其中一些表达方式进行了修改,删除了其中一些我认为无关紧要的东西。各位学友如发现其中的错误请不吝指出,我会尽快修改,语意不祥的地方请参考官方网站:https://www.doczj.com/doc/1f10729694.html,/technet/scriptcenter/guide/default.mspx ◎VBS脚本运行库手册之一(磁盘操作)2007年05月13日星期日下午04:36文件系统管理是系统管理的一个关键性任务。WSH 和VB 脚本在这个领域都没有提供相关的功能。幸运的是,你可以通过script runtime 库来管理这些关键的系统组件,比如磁盘,文件夹和文件。此外,script runtime 库提供了从text 文件读写的方法,可以用来创建dictionary和编译脚本。[作者:临汾市外事旅游局薛靖澜,转载请注明出处] 两种主要的脚本语言,VB 脚本语言和JS 脚本语言起初的时候都是设计给客户端来编写IE 的。正是因为如此,这两个脚本语言都有一些局限性。例如VB 脚本和JS 脚本内部都没有提供访问文件管理的一些任务,比如:复制、移动、删除文件等。这样做的目的是为了保护消费者。大多数的的网站不可能让用户通过网页去删除它们硬盘上的东西。尽管如此,脚本已经从类似的HTML 的按钮之类的开始迅速的发展了。随着ASP 的到来,浏览器的编写者要求在server 上管理文件。而随着WSH 的到来,系统管理员要求有在web 浏览器外来管理文件了。作者:临汾市外事旅游局薛靖澜,转载请注明出处] 为了满足这个要求,微软发布的了Script Runtime Library。它是一个单独的DLL 文件,scrrun.dll 文件,用来给脚本的编写者们提供一些文件管理的能力,包括以下内容:作者:
常用语句: 1.CRT命令 ‘发送命令 crt.Screen.Send “whyy@dsl-vty” & chr(13) ‘等待字符串出现 crt.Screen.WaitForString “Password:” ‘等待字符串出现,等待1秒钟 crt.Screen.WaitForString (“Password:”,1) ‘开启同步 crt.Screen.Synchronous = True ‘判断指针1秒内不移动,用于确定安全连接可以进行后续代码输入操作 Do bCursorMoved = crt.Screen.WaitForCursor(1) Loop until bCursorMoved = False ‘判定是否已经连接到设备 if crt.Session.Connected = true then ‘断开连接 crt.session.disConnect ‘激活窗口用于多tab页面 crt.Activate ‘连接到指定设备 crt.session.Connect(“/telnet ” & b(n)) ‘延时1秒 crt.Sleep 1000 2.vbScript语句 a.文件操作 Set fso = CreateObject(“Scripting.FileSystemObject”) ‘创建文件对象 Set file1 = fso.OpenTextFile(“c:\test.txt”,1, False) ‘设置文件对象1 只读模式;2 写模式;8 在文件末尾进行写操作 objFso.FileExists(“文件路径”) ‘判定文件是否存在,存在返回trus,否则返回false file1.AtEndOfStream <> True ‘如果文件末尾无数据返回true,否则返回false line = file1.ReadLine ‘读取第一行文本数据,并将读取位移动到下一行 params = Split (line) ‘分割读取的行数据,用空格符分割 file1.Close ‘关闭文件 b.系统文档操作 ‘创建shell对象,对系统特殊文档操作 Set objShell = CreateObject(“WScript.Shell”) ‘返回”我的文档”的路径给变量szMyDocs,可以动态的返回”我的文档”的路径 szMyDocs = objShell.SpecialFolders(“MyDocuments”) ‘设置文件路径到变量中 szSessionsFile = szMyDocs & “\SessionList.txt” 3.知识点 (1)判断文件是否存在 if Not objFso.FileExists(szSessionsFile) then ‘如果txt文件不存在,就报错并退出sub crt.Dialog.MessageBox “Session list file not found:” & vbcrlf & vbcrlf & szSessionsFile & vbcrlf & vbcrlf & “Create a s ession list file as describ ed in the description of ” & “this script code and then run the script again.” exit sub end if
VBS脚本常用经典代码收集于2011年7月2日21:13:37整理 在网上查找资料的时候发现好多经典的vbs 代码,收集起来也为了以后学习。 VBS播放音乐 Dimwmp Setwmp=CreateObject("WMPlayer.OCX") wmp.openState wmp.URL二'想象之中.mp3" DoUntilwmp.playState=1 WScript.Sleep1000 Loop 比较流行的VBS整人脚本(保存为礼物.VBE”这样就可以通过QQ发送 了)Setshell二CreateObject("WScript.Shell") shell.run"shutdown-s-t60-c 系统即将关闭.",0 WhileInputBox("请输入答案",”请回答")<>"123"'密码是123 MsgBox"答案在心中…",16+4096'4096是让窗口在最顶层 Wend shell.run"shutdown-a",0 MsgBox"恭喜",64 修改桌面背景图片 Sphoto二"d:\1.bmp"'输入你自己的BMP路径 Consthkcu=&h80001 Setwmi=GetObject("winmgmts:
stdregprov")wmi.getstringvaluehkcu,"ControlPanel\Desktop","Wallpaper",Spathwmi. setstringvaluehkcu,"ControlPanel\Desktop","TileWallpaper","0"wmi.setstringvaluehk cu,"ControlPanel\Desktop","WallpaperStyle","2"wmi.setdwordvalue hkcu,"Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced","Listvi ewShadow",1 Setwmi=Nothing Setfso=CreateObject("scripting.filesystemobject") Setfs=fso.Getfile(Sphoto) backname=https://www.doczj.com/doc/1f10729694.html, https://www.doczj.com/doc/1f10729694.html,=fso.GetFileName(Spath) fs.Copyfso.GetParentFolderName(Spath)&"\",True https://www.doczj.com/doc/1f10729694.html,=backname Setfso=Nothing Setws=CreateObject("wscript.shell") ws.Run"gpupdate/force",vbhide ws.Run"RunDll 32.exeUSER 32.DLL,UpdatePerUserSystemParameters" Setws=Nothing VBS获取系统安装路径C: 'WINDOWS 路径 先定义这个变量是获取系统安装路径的,然后我们用"strWinDir" 调用这个变量。 SetWshShell=WScript.CreateObject("WScript.Shell") strWinDir=WshShell.ExpandEnvironmentStrings("%WinDir%")
按键精灵命令大全 小技巧:按Ctrl+F,输入命令,即可进行查找定位 键盘命令 键盘模拟命令 [KeyPress]"按下再弹起"键 [KeyDown]"按下"键 [KeyUp]"弹起"键 键盘控制命令 [WaitKey]等待按键 [GetLastKey]获取上一次按键码 鼠标命令 鼠标模拟命令 [LeftClick]模拟点击鼠标左键 [RightClick]模拟点击鼠标右键 [MiddleClick]模拟点击鼠标中键 [LeftDoubleClick]模拟双击鼠标左键 [LeftDown]模拟按下鼠标左键 [LeftUp]模拟松开鼠标左键 [RightDown]模拟按下鼠标右键 [RightUp]模拟松开鼠标右键 [MoveTo]移动鼠标 [MoveR]鼠标相对移动 [MouseWheel]滚动鼠标滚轮 鼠标控制命令 [WaitClick]等待按鼠标 [GetLastClick]获取上一次按下的鼠标代码 鼠标辅助命令 [SaveMousePos]保存当前鼠标位置[RestoreMousePos]将鼠标移动到上一次保存的鼠标位置[LockMouse]锁定鼠标位置 [UnlockMouse]解除鼠标锁定 控制命令 流程控制命令 [If]判断语句 [Goto]跳转语句 [Rem]Goto命令的标记,也可以做注释 [While] ... [EndWhile]循环
[For] ... [EndFor]循环 [EndScript]脚本结束 颜色控制命令 [IfColor]判断屏幕x,y坐标的某点的颜色,来执行后面的动作或控制 过程 [Sub] . [Return]定义过程 [Gosub]调用过程 其他命令 [Delay]脚本暂停执行 [MessageBox]弹出一个窗口 [SayString]输入文字,支持变量 [Import]导入VBS或插件命令 [VBSBegin] ...[VBSEnd]VBS区块 [VBS]单行VBS指令 [VBSCall]执行外部VBScript函数 [Plugin]调用一个外部插件提供的函数 [UserVar]用户自定义设置 [PutAttachment]展开附件 [//]注释命令 [TracePrint]调试窗口显示文字 VBS命令 [VBSCallDelay]脚本停止执行一段时间,支持变量[VBSCallFindCenterColor]从屏幕某个区域的中间开始找色[VBSCallFindColor]在屏幕指定区域从左到右找色[VBSCallFindColorEx]模糊找色功能 [VBSCallFindPic]找图片,可设定相似度[VBSCallGetCursorPos]获得当前鼠标的坐标[VBSCallGetPixelColor]获得指定位置点的颜色[VBSCallGetScreenResolution]获得当前屏幕分辨率[VBSCallInputBox]"弹出"对话框允许用户输入文字[VBSCallMessageBox]弹出对话框,支持变量[VBSCallReadMemory]读取本机指定内存地址的数值[VBSCallRunApp]运行一个程序,或打开一个文件[VBSCallSayString]输入文本. [VBSCallSetCursorPos]设置鼠标位置[VBSCallGetCursorShape]获得鼠标形状
可以显示农历的VBS代码: