作為一個(gè)程序員,怎么能不用一些腳本來做一些神奇的事情呢?最近后臺工作很忙,查看日志只能交給我們客戶端,不過感覺都是重復(fù)性操作,就想著寫成一個(gè)腳本,遇到了很多問題
一 : 這個(gè)腳本的動(dòng)作是
1 先把本機(jī)的用戶改為root用戶 因?yàn)榉?wù)器的用戶名是root
sudo -i
需要輸入密碼
2 然后用ssh登陸到服務(wù)器
ssh name@domini
然后輸入密碼
3 然后需要找到對應(yīng)的位置 tail -f 一下out文件 就可以了
二 : 開始寫
1 模擬鍵盤輸入就是輸入密碼的動(dòng)作
這個(gè)問題百度了一下要安裝expect 具體方法就不寫了網(wǎng)上一大堆
裝好了之后
#!/usr/bin/expect
spawn sudo -i
expect "Password:"
send "你的密碼\n" #此處的\n為模擬鍵盤的enter鍵
spawn ssh name@domini "tail -f 日志路徑"
#ssh name@domini "命令" 此方式是登陸并且執(zhí)行服務(wù)器命令
expect "*password:"
send "你的密碼\n"
interact
作為一個(gè)程序員應(yīng)該考慮多一點(diǎn),比如加一個(gè)口令啦,加一個(gè)提醒了本以為只是加一個(gè)sh的if就可以了,可是怎么在shell里調(diào)用expect呢?
2 shell里調(diào)用expect
#!/bin/sh
read -p "is lookLog?yes|no:" result
if [ "$result" == "yes" ] #注意這里的寫法,[]里兩邊一定要留空格,不然sh識別不出來
then
echo 'hha'
/usr/bin/expect<<EOF #此方式是在sh中執(zhí)行expect命令
spawn sudo -i
expect "Password:"
send "密碼\n"
spawn ssh username@host"tail -f 日志路徑"
expect "*password:"
send "密碼\n"
set timeout -1 #注意代表一直等待下去,如果不設(shè)置就會用默認(rèn)值10s之后expec就會繼續(xù)執(zhí)行下去就進(jìn)程完成了
expect eof #注意原來的interact(互動(dòng))要改為 expecteof
EOF
else
echo 'hehe'
fi
在此說一下timeout,我認(rèn)為是一個(gè)全局的變量,代表等待多長時(shí)間就繼續(xù)執(zhí)行,因?yàn)闆]有寫interact ,而日志要一直監(jiān)控,所以timeout設(shè)置為-1就是一直等待下去
后語:這樣你就可以賦執(zhí)行權(quán)限,然后放在桌面,需要的時(shí)候只要點(diǎn)擊就可以了。