2011-01-23 149 views
0

我需要定期從Linux客戶端連接到服務器併發送一些命令,所以我寫這個劇本:最簡單的方法

#!/bin/sh 
telnet theserver.somewhere.com 9999 <<EOF 
command 1 
command 2 
command 3 
EOF 

的問題是,我需要在命令之間等待。該腳本太快地發送命令並斷開連接,服務器檢測到這些命令並斷開連接,並丟棄命令。如果我從命令行打開連接,然後一次一個地粘貼命令,並且它可以從非本地客戶端運行,但是從本地客戶端腳本運行失敗,則它起作用。在每個命令之間暫停一秒左右就足夠了。

我可以寫一個C或Java程序來做到這一點,但最簡單的方法是什麼?通常的腳本語言(Perl和Python)是可用的,如果你需要它們的話。

回答

3

Shell命令從文件回波同時一行的telnet:

cat commands.txt | 
    (while read line; do echo $line; sleep 1; done) | 
    telnet theserver.somewhere.com 9999 
+0

謝謝!一個非常簡短的腳本,只使用shell和標準命令。如果我還沒有使用RoeeK的Python腳本,我會用這個。 – 2011-01-23 10:53:25

0

您是否嘗試過使用睡眠命令?我不確定這是否會起作用,因爲它可能會嘗試在其他服務器上發出該命令,但值得一試的是,只需發出諸如sleep 2之類的動作即可暫停幾秒鐘。

+0

我不能設法逃脫到Telnet命令模式。它可以在手動輸入東西時使用,但由於某些原因,不在腳本中。任何提示? – 2011-01-23 10:35:31

2

首先,如果服務器代碼在你的控制中,那麼我建議你在服務器中解決這個問題,因爲沒有真正的原因,爲什麼'關閉連接太快'會有問題。

然後,我會寫一點點,簡單的Python腳本:

#!/bin/python 

import socket,time 

s=socket.socket(socket.AF_INET) 
s.connect(("theserver.somewhere.com",9999)) 
s.sendall("1") 
time.sleep(1) 
s.sendall("2") 
time.sleep(1) 
s.close() 
+0

這工作,是相當簡單,我現在使用它。謝謝! – 2011-01-23 10:48:46

1
set s [socket $HOST $PORT] 
fconfigure $s -buffering line 
puts $s $command1 
sleep $no_of_sec 
puts $s $command2 

我的TCL是有點生疏,但我認爲這是最容易的方式。你也可以使用一些Tk來創造奇蹟。 http://www.tcl.tk/man/tcl/tutorial/tcltutorial.html

+0

也感謝這一個。 – 2011-01-23 10:54:52