歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> 關於Linux

自動連接多台機器並搜尋日志的腳本

自動連接多台機器並搜尋日志的腳本   我們應用部署在10台機器上,對應地日志文件也分散在這10台上。若想從這10份日志文件中,搜索,如報錯信息,是比較常見的需求。   下面的腳本干的就是這事兒。大體邏輯十分簡單:   Pseudocode:  for hostname in (10台機器):      ssh連接遠程host      從日志文件中找出符合條件的行並寫到本地文件中   看似簡單,但對於shell編程生疏的我來講,有以下兩個難點: 1. 如何ssh時,不需要手動輸入passphase/password 2. 如何結束當前ssh session後,繼續開啟下一個ssh session   google了半天,運氣算好,搞定了,解決方案如下:   1. 如何ssh時,不需要手動輸入passphase/password?   用ssh-agent!此進程啟動後,只需手動輸入passphase一次,則ssh-agent就會記住你的passphase,後面連接遠程機子時,它會自動從記憶中讀取,不需要人為再次輸入了。   環境設置如下:   1) 生成public/private key pairs:     $ssh-keygen -t dsa   2) 把生成的public key (id_dsa.pub)放到10台遠程機器上     $scp .ssh/id_dsa.pub username@hostname:.ssh/authorized_keys  (10次)   3) 確保ssh-agent已啟動,若無,則啟動:     $ps aux | grep ssh-agent      #check if it`s running     $eval `ssh-agent`                 #if not, start up the agent process   4) 向ssh-agent提交你的passphase:     $ssh-add   5) 把ssh-agent相關信息保存到變量中,以便在執行腳本時導入引用:     $ssh-agent -s > ~/.bashrc   6) 腳本中記得引入變量即可,如:     $source ~/.bashrc   2. 如何結束當前ssh session後,繼續開啟下一個ssh session? <<"EOF" EOF   具體原理,後面再補充!   到此,整個可執行腳本就出來了。再在crontab -e裡寫上一行,輕輕松松讓它每天自動收集報錯信息並發郵件給俺! 腳本附上,寫得實在是粗陋,隨便嫌棄哈,不用對我客氣! 順便,若有更簡潔的解決方案,求不吝賜教!   #!/bin/bash  source ~/.bashrc    hostfile="/home/bai/host_videoapi"             #一機器一行 keyword="fail@"                                        #查詢的關鍵字 search_log="videoapi.log"                      #查尋的日志文件名  outputfile="error_videoapi.log"                #output file    #挨個兒連接並搜尋錯誤信息 while read line   do       vahost=$line       echo "---hostname:" $vahost "-----" >> $outputfile      ssh $vahost "find /home/videoapi/logs -type f -name $search_log -exec  grep -i $keyword {} \; -print " >> $outputfile <<"EOF" EOF      echo "---finishing-----"   done < $hostfile     #查看是否有錯誤信息,有則發郵件,無則done nothing  if grep -q $keyword $outputfile  then       mail -s "errors in videoapi!" [email protected] < $error_log   else       echo "it is a nice day!"   fi   
Copyright © Linux教程網 All Rights Reserved