Linux下Expect命令应用

字体大小: 中小 标准 ->行高大小: 标准

在安装好expect 和tcl后,我们就可向各个主机中执行相同的命令了,实际上也就是执行的TCL脚本,如下就是一个TCL脚本。

expect.tcl脚本逻辑:

1) 先SSH到所要的执行命令的主机 ,spawn ssh $user@$hostname

2) 然后在执行shell命令,脚本中执行的 是 函数exec_shell_command

3)脚本中log 为执行日志函数

expect.tcl

  1. #!/usr/local/bin/expect   
  2. ###set log file handle  set timeout 5 
  3. set systemTime [clock seconds]  set file "tcl.log" 
  4. set fileid [open $file a]  seek $fileid 0 start 
  5.   ###set the arguments 
  6. set hostname [lindex $argv 0]    #主机名  set user [lindex $argv 1]        #用户名 
  7. set passwd [lindex $argv 2]      #密码   
  8.   proc exec_shell_command {} {     #执行命令函数 
  9.     send "rm -f xubc.log\r"      log "commands  completed..." 
  10. }   
  11. proc log {msg} {                 #写日志函数     global fileid 
  12.    set systemTime [clock seconds]     puts $fileid "[clock format $systemTime -format %H:%M:%S] --- $msg" 
  13. }   
  14. log "$hostname begin....."   
  15. if {$argc != 3} {      log $argc 
  16.     log $argv      log "Usage: error arguments.\n " 
  17. } else {      spawn ssh $user@$hostname 
  18.     expect {         "yes/no" { send "yes\r";exp_continue } 
  19.        "password:" { send "$passwd\r" }      } 
  20.     log "Login $hostname Successfully..."      exec_shell_command 
  21. }  log "exit $hostname..." 
  22. send "exit\r"  log "$hostname end... " 
  23. expect eof 

主机名:master  用户:Hadoop  密码:123456

执行脚本的命令: 

expect  expect.tcl  master  hadoop 123456 

再有上面的基础脚本后,对于多台服务器配置,我们可以把服务器信息的写入配置文件

server.lst

  1. master hadoop 123456  slave1 hadoop 123456 
  2. slave2 hadoop 123456  slave3 hadoop 123456 

最后通过一个shell脚本,读取server.lst来完成每台机器的配置,实例中是 创建一个xubc.log的文件
expect.sh

  1. #!/bin/bash   
  2. while read line    do 
  3.     echo expect expect.tcl $line;      expect expect.exp $line 
  4.   done < server.lst 

sh expect.sh  将分别在每台服务器当前用户目录下创建 名为xubc.log 的文件,相关日志文件会在tcl.log中。

相关阅读:Linux下Expect命令安装 http://www.linuxidc.com/Linux/2012-10/72761.htm

此文章由 http://www.ositren.com 收集整理 ,地址为: http://www.ositren.com/htmls/65028.html