shell指令碼實現多台伺服器自動巡檢 摘要: 營運服務一個項目二十多台(或者多台)伺服器,每天要做伺服器的效能巡檢工作是查看伺服器的CPU、記憶體、磁碟空間是否在正常值範圍內。像這樣每天或者每個固定時間段都做相同的重複工作,為了簡化重複的工作,我寫了基於liunx伺服器的自動巡檢指令碼,在crontab中設定一個固定時間進行自動執行即可,以減少人工重複勞動的工作。 環境: 我的項目上主要伺服器是LINUX和AIX兩種伺服器,總數在30台左右。現在的工作量是每周巡檢兩次,都是手動登入到每台伺服器使用相應的命令查看伺服器績效參數。 思路: 1、所有的伺服器之間的網路都是在同一個區域網路內,所有網路兩兩相通。 2、在其中選擇一台效能相對較好或者是伺服器運行壓力較小的伺服器,作為巡檢伺服器。 3、通過這一伺服器來實現對其他伺服器的巡檢,然後把巡檢結果記錄到巡檢伺服器上。 4、每台伺服器巡檢結果都以時間和ip做命名用來區分,最後將所有巡檢結果壓縮打包。 5、每次維護人員只需要定時去取這個壓縮包查看最後結果即可,免去了對每台伺服器都需要登入和輸入相同的命令進行查看。 具體實現指令碼: #! /bin/bashecho "start running!" | tee -a LANG=enset `date`path="/home/check"echo "start running!" | tee -a $path/log/$1-$2-$3.logif [ -d /home/check/result/$1-$2-$3 ]; then echo ''elsemkdir /home/check/result/$1-$2-$3echo `date +"%Y/%m/%d-%H:%M:%S"` "create " "$1-$2-$3" "directory success !"|tee -a $path/log/$1-$2-$3.logfiecho `date +"%Y/%m/%d-%H:%M:%S"` "starting reading linuxconfig.txt !" |tee -a $path/log/$1-$2-$3.logcat "$path"/config/linuxconfig.txt| while read line;doip=`echo $line |cut -d '=' -f2`echo `date +"%Y/%m/%d-%H:%M:%S"` "check LINUX " $ip " starting !" |tee -a $path/log/$1-$2-$3.log(sleep 1echo account sleep 1echo password sleep 3echo "free -k"echo ""echo "df -k"echo ""#memory_used_rateecho "ps -ef| grep java"echo ""echo "netstat -an|egrep -n '8010|8008|9008|44444|4100'"echo ""echo "ifconfig -a"echo ""echo "top -n1|sed -n '1,5p'"echo "exit"sleep 5)|telnet $ip >/home/check/result/$1-$2-$3/$ip-$1-$2-$3-$4.txtecho `date +"%Y/%m/%d-%H:%M:%S"` "check LINUX " $ip " end !" |tee -a $path/log/$1-$2-$3.logecho "" | tee -a $path/log/$1-$2-$3.logdoneecho `date +"%Y/%m/%d-%H:%M:%S"` "end reading linuxconfig.txt !" |tee -a $path/log/$1-$2-$3.log echo `date +"%Y/%m/%d-%H:%M:%S"` "starting reading AIXconfig.txt !" | tee -a $path/log/$1-$2-$3.logcat "$path"/config/AIXconfig.txt| while read line;doip=`echo $line |cut -d '=' -f2`echo `date +"%Y/%m/%d-%H:%M:%S"` "check IBM AIX " $ip " starting !" |tee -a $path/log/$1-$2-$3.log(sleep 1echo accountsleep 1echo password sleep 5echo ""echo "df -k"echo ""#memory_used_rateecho "ps -ef| grep java"echo ""echo "netstat -an|egrep -n '8010|8008|9008|44444|4100'"echo ""echo "ifconfig -a"echo ""echo "topas"echo "exit"sleep 5)|telnet $ip >/home/check/result/$1-$2-$3/$ip-$1-$2-$3-$4.txtecho `date +"%Y/%m/%d-%H:%M:%S"` "check IBM AIX " $ip " end !" |tee -a $path/log/$1-$2-$3.logecho "" | tee -a $path/log/$1-$2-$3.logdoneecho `date +"%Y/%m/%d-%H:%M:%S"` "end reading AIXconfig.txt !" | tee -a $path/log/$1-$2-$3.logzip -r /home/check/result/$1-$2-$3/$1-$2-$3.zip /home/check/result/$1-$2-$3/*echo "End running !" 注意: 該指令碼的巡檢是基於TELNET服務所以被檢伺服器必須開啟TELNET服務,不然巡檢會失敗。