2011-01-23 116 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