shell-6

chunyang315發表於2018-04-25

執行告警系統

  • 監控系統環境已經搭建完成,關於它 的使用可以是建立一個任務計劃crontab -e
 * * * * * cd /usr/local/sbin/mon/bin; bash main.sh

只有這樣才能正常的執行成功。

  • 因為是實驗關係,就不要寫入到crontab裡面去,可以手動執行檢視是否有錯誤
    (1)cd /usr/local/sbin/mon/bin/
    (2)sh -x main.sh 執行過程中出現錯誤提示,卡在了exec那裡,exec就是把接下來的執行過程寫入到了日誌中(cat ../log/err.log)
    (3)出現502錯誤,需要在../conf/mon.conf中定義不監控502,因為502的指令碼不能執行。
    (4)在除錯 的過程中可以將main.sh中註釋掉exec那行。
    (5)再次執行,執行過程無問題。還可以呼叫load.sh也是沒有問題的

分發系統介紹

  • 分發系統應用場景:當業務越來越大,網站、appw服務端所使用的程式語言為PHP,要想執行php程式碼,需要搭建LAMP或者是LNMP環境,最後需要將程式碼上傳到伺服器上去。(這個過程其實就是做一個網站),在平時的工作中,業務不斷的在迭代更新,那這時候就需要去該程式碼了,如果上百臺機器都是儲存的都是這一個站點,比如說有一個介面,APP訪問量很大,APP需要呼叫服務端的一個介面,那麼有50臺機器去承載這個介面,那麼就需要分發系統了,能夠將每段時間更新的程式碼分發到這50臺機器上去

  • 使用shell程式設計可以實現上線的工具。分發系統也就是上線的shell指令碼,最為核心的是expect。

  • expect可以說是一種指令碼語言,與shell相似。通過它可以實現傳輸檔案,遠端執行命令不需要輸入密碼。

  • 所謂上線就是將開發人員開發的程式碼釋出到線上環境中去,目前可以FTP或者xftp上傳,還可以使用rz/sz,在伺服器上直接更改非常不規範。

  • 分發系統
    (1)準備模組機器,該機器上的程式碼是準備要上線的程式碼
    (2)需要知道被上線伺服器的IP地址,對應使用者的密碼也要知道。
    (3)使用expect指令碼藉助於rsyc把這些程式碼推送到被上線的機器上去。如果需要執行命令還可以遠端登入去執行命令


expect指令碼遠端登入 ##

  • 安裝expect
yum install -y expect 

之前mkpasswd安裝的包就是expect

  • expect指令碼示例 (自動遠端登入,並執行命令)
#!/usr/bin/expect
set host "192.168.xxx.xxx"
set paswwd "xxxxxx"
spawn ssh root@$host
expect {
"yes/no" {send "yes\r" ;exp_continue}
"password:" {send "$passwd\r"}
}
interact   //表示需要停留在遠端的機器上,不退出來。
如果登入過去沒有進行任何操作停留幾秒鐘退出可以使用exprct eof  ,這2個都不加會馬上退出來
  • 如果之間連線過另一臺機器,那麼再次連線時就不會出現提示讓你選擇yes/no。 需要繼續提示可以清空/root/.ssh/known_hosts檔案。

expect指令碼遠端執行命令

  • 自動遠端登入,並執行命令並退出
#!/usr/bin/expect 
set user "root"  //定義變數
set passwd "xxxx"   //定義變數
spawn ssh $user@192.168.xxx.xxx

expect {
"yes/no" {send "yes\r";exp_continue} // 
"password:" {send "$passwd\r"}
}
expect "]*"   //這裡的]*表示通配#或者$
send "touch /tmp/1.txt\r"
expect "]*"
send "echo 1212 > /tmp/1.txt\r"
expect "]*"
send "exit\r"  //最後退出

expect指令碼傳遞引數

  • expect是可以傳遞引數的,也相當於是它的內建變數
#!/usr/bin/expect
set user [lindex $sargv 0] //$sargv 0第一個引數//這行表示把第一個引數的值付給user
set host [lindex $sargv 1]
set paswwd "xxxxxx"
set cm [lindex $sargv 2]
spawn ssh  $user@$host
expect {
"yes/no" {send "yes\r" }
"password:" {send "$passwd\r"}
}
expect "]*"
send  "$cm\r"   
expect "]*"
send "exit\r"

執行

./zcy.expect root 192.168.2xx.xxx  ls 
就會列出目錄下面的檔案  ,如果是多條命令可以這樣"w;ls;date"

相關文章