shell-6
執行告警系統
- 監控系統環境已經搭建完成,關於它 的使用可以是建立一個任務計劃
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"