Linux下Expect命令应用

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

expect.tcl脚本逻辑:

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

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

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

expect.tcl

#!/usr/local/bin/expect 

 

###set log file handle 

set timeout 5 

set systemTime [clock seconds] 

set file "tcl.log" 

set fileid [open $file a] 

seek $fileid 0 start 

 

###set the arguments 

set hostname [lindex $argv 0]    #主机名 

set user [lindex $argv 1]        #用户名 

set passwd [lindex $argv 2]      #密码 

 

 

proc exec_shell_command {} {     #执行命令函数 

    send "rm -f xubc.log\r" 

    log "commands  completed..." 

 

proc log {msg} {                 #写日志函数 

   global fileid 

   set systemTime [clock seconds] 

   puts $fileid "[clock format $systemTime -format %H:%M:%S] --- $msg" 

 

log "$hostname begin....." 

 

if {$argc != 3} { 

    log $argc 

    log $argv 

    log "Usage: error arguments.\n " 

} else { 

    spawn ssh $user@$hostname 

    expect { 

       "yes/no" { send "yes\r";exp_continue } 

       "password:" { send "$passwd\r" } 

    } 

    log "Login $hostname Successfully..." 

    exec_shell_command 

log "exit $hostname..." 

send "exit\r" 

log "$hostname end... " 

expect eof 

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

执行脚本的命令: 

expect  expect.tcl  master  hadoop 123456 

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

server.lst

master hadoop 123456 

slave1 hadoop 123456 

slave2 hadoop 123456 

slave3 hadoop 123456 

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

#!/bin/bash 

 

while read line 

  do 

    echo expect expect.tcl $line; 

    expect expect.exp $line 

  done < server.lst 

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/20752.html