標籤:windows平台自動執行linux指令碼 putty 批量關機
不算什麼新知識了,但是對於像我這樣的小白來說,如果一早就能找到一篇這樣從實戰中總結出來的心得,就不會今天忙得只喝兩杯水了(好吧,膽大心細臉皮厚是我的人生座右銘╭(╯^╰)╮)
背景:
某項目要求從效能測試工具LoadRunner中類比並發使用者調用位於一台mac虛擬機器上的shell指令碼。
putty 批量關機 http://alwaysyunwei.blog.51cto.com/3224143/1223455/
方法一:Plink windows bat(通用方法)
這個方法的原理是通過windows上免費的OpenSSH工具Putty帶的plink工具實現遠程登入伺服器並自動運行shell指令碼。
步驟1:下載plink.exe & putty.exe值本地目錄,如d:\Proram Files\plink.exe。這兩個軟體都是免安裝版的。
步驟2:將需要啟動並執行shell指令碼放到本地目錄。如c:\test.sh
步驟3:建立一個tet.bat檔案,並在其中寫入如下命令:
=此方法本人測試沒通,使用putty實現的
@echo off
d:
cd Program Files
plink -l [userName] -pw [password] -m c:\test.sh [ServerName or IP]
exit
儲存後雙擊運行即可。在這裡要注意的是因為我的plink.exe放在了D盤的program files這個檔案夾下,也就是對應上面指令碼的第二行和第三行。實際使用中需要換成當前放置plink.exe的目錄。還有一點特別要注意的是想要啟動並執行shell指令碼是要放到你本地的,我一開始以為是放到server端,而且看到網上一些文章也寫的是server端,事實證明運行是通不過的,所以這裡也需要注意。
在運行時,命令列會視窗彈出停一會,然後自動關閉。如果想檢查test.sh裡所寫的是不是真的被運行了,建議在test.sh裡加入一些debug的輸出語句,把內容輸出到某個檔案,然後就可以通過Putty或者其他ssh client訪問server並查看這個output檔案了。
還需要說明的一點是在mac機的system preference/sharing配置裡需要把remote logon勾選上,不然ssh串連的建立會失敗。(這個我糾結了,最後還是Frank找到的solution~)
至於在LoadRunner中調用test.bat這個批次檔就比較簡單了,使用system()這個函數就可以了。perl或者shell指令碼的調用同理。
PUTTY方法:
下載putty.exe (綠色版)
bat 如下
@echo off
@color 0A
set path=%cd%
cd %path%
"%path%/putty.exe" -ssh -pw thwltomcat -m "%path%/restart.txt" tom[email protected]
pause
==附送重啟指令碼
@echo off
@color 0A
set path=%cd%
cd %path%
:input
@echo 0.101 ━━━━四川重慶API伺服器━━━━
@echo 0.103 ━━━━四川重慶DAO伺服器━━━━
@echo 0.130 ━━━━資料平台,四員聯動伺服器━━━━
@echo 0.131 ━━━━SAAS-API伺服器━━━━
@echo 0.132 ━━━━SAAS-DAO伺服器━━━━
@echo 0.180 ━━━━快消品伺服器━━━━
set/p floor=......請輸入需要重啟的應用的伺服器(如0.101、0.103、請輸入101、103):
if %floor% neq 101 (
if %floor% neq 103 (
if %floor% neq 130 (
if %floor% neq 131 (
if %floor% neq 132 (
if %floor% neq 180 (
if %floor% neq 5 (
if %floor% neq 9 (
if %floor% neq 10 (
if %floor% neq 11 (
if %floor% neq 12 (
if %floor% neq 13 (
if %floor% neq 14 (
if %floor% neq 15 (
if %floor% neq 16 (
echo.
echo 請檢查您輸入的伺服器是否存在
goto :input
)
)
)
)
)
)
)
)
)
)
)
)
)
)
)
if %floor%== 101 (
@echo 選擇101,正在重啟四川重慶API應用
"%path%/putty.exe" -ssh -pw thwltomcat -m "%path%/restart.txt" [email protected]
@echo 重啟四川重慶API應用結束........ 0.130
goto :end 0.130
) 0.130
if %floor%== 103 ( 0.130
@echo 選擇103,正在重啟四川重慶DAO應用 0.130
"%path%/putty.exe" -ssh -pw thwltomcat -m "%path%/restart.txt" [email protected]
@echo 重啟四川重慶DAO應用結束........ 0.130
goto :end 0.130
) 0.130
if %floor%== 130 ( 0.130
@echo 選擇130,正在重啟資料平台四員聯動應用 0.130
"%path%/putty.exe" -ssh -pw thwltomcat -m "%path%/restart.txt" [email protected]
@echo 重啟資料平台四員聯動應用結束........ 0.130
goto :end 0.130
) 0.130
if %floor%== 131 ( 0.130
@echo 選擇131,正在重啟SAAS-API應用 0.130
"%path%/putty.exe" -ssh -pw thwltomcat -m "%path%/restart.txt" [email protected]
@echo 重啟SAAS-API應用結束........ 0.130
goto :end 0.130
) 0.130
if %floor%== 132 ( 0.130
@echo 選擇132,正在重啟SAAS-DAO應用 0.130
"%path%/putty.exe" -ssh -pw thwltomcat -m "%path%/restart.txt" [email protected]
@echo 重啟SAAS-DAO應用結束........ 0.130
goto :end 0.130
) 0.130
if %floor%== 180 ( 0.130
@echo 選擇180,正在重啟快消品應用 0.130
"%path%/putty.exe" -ssh -pw thwltomcat -m "%path%/restart.txt" [email protected]
@echo 重啟快消品應用結束........
goto :end
)
)
:end
@echo 重啟Tomcat服務結束━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
pause
方法二:LR內建的RTE協議錄製
這個方法的原理是採用LoadRunner內建的RTE(Remote Terminal Emulation)協議直接錄製使用者建立SSH串連和activity的過程並轉化為LR指令碼。步驟如下:
步驟1:修改recording options.(以下僅針對錄製Linux server)
1) 取消所有與IBM相關的勾選
2)選擇Session type=Telnet,連接埠=22,terminal type=SSH, 然後點擊connect按鈕進行錄製。
步驟2:修改和調試指令碼。
步驟3:在controller中運行指令碼。
前面兩步都沒什麼問題,但是步驟3就碰到了各種攔路虎。首先是不能啟用ip欺騙,否則會出現你所選擇的協議不支援按線程啟動並執行提示;取消ip欺騙後運行,發現generator CPU資源很快就被mdrv.exe進程佔滿了,100%後直接死在那了。即使運行單使用者,mdrv.exe也會佔50%左右的CPU。我看到網上有些同行用RTE協議在單台機器上類比過300左右的使用者,不知道為什麼我錄製的ssh登入 echo命令執行 exit會這麼佔資源..在群裡問了也沒人知道,可能這個協議在公司裡用得不是那麼多吧,據說銀行業比較會用到。還有最後一個問題是使用者跑完第一次迭代就等在那裡,不再繼續跑下一個迭代,也不退出系統。Vugen裡多迭代完全無障礙啊,也檢查過controller裡pacing什麼的都沒問題,撓破頭也沒想出來是為什麼,抓狂啊!
目前今天的成果就是這樣了,最後可行的還是方案一。方案二後續可以繼續研究,目前看來IT的項目中需要用到http之外的協議並且思科買了license的機會真的好難得啊...
本文出自 “隱隱的淚” 部落格,轉載請與作者聯絡!
如何從windows平台自動連接到Linux/Mac機運行shell指令碼?