1.Expect脚本
#!/usr/bin/expect
# 参数解析
set service [lindex $argv 0] # 获取第一个参数:服务名
set environment [lindex $argv 1] # 获取第二个参数:子类型
set keyword [lindex $argv 2] # 获取第三个参数:关键词
# SSH连接到远程服务器
spawn ssh user@t-3-3 # 启动ssh连接到远程服务器
expect "password:" # 等待密码提示
send "123456\r" # 发送密码
expect "$ " # 等待出现命令提示符
# 进入日志路径并查看日志
if {$keyword eq ""} { # 如果关键词为空
send "tail -500f /mnt/logs/oryx-$service-*-$environment.log\r" # 显示最近500行日志,并实时更新
} else { # 如果有关键词
send "cat /mnt/logs/oryx-$service-*-$environment.log | grep -20a $keyword\r" # 查找日志中包含关键词的行,并显示上下20行
}
expect "$ " # 等待出现命令提示符
# 退出SSH连接
#send "exit\r" # 发送退出命令
expect eof # 等待会话结束
执行命令:
expect test.sh object-engine test2 fe28c2fb8646ded2
或
expect test.sh object-engine test2
2.Expect
Expect是一个用于自动化交互任务的工具,主要用于自动化执行需要交互的命令行程序。它可以自动输入命令和响应提示符,从而在无需人工干预的情况下完成任务。Expect脚本常用于测试、远程登录和自动化安装等场景。
1)命令解释
spawn用于启动一个新的进程。通常用于启动一个命令行程序或脚本,例如ssh连接。
spawn ssh user@host
expect用于等待指定的输出出现。当检测到输出时,可以执行后续命令。
expect "password:"
send用于向进程发送输入。例如,发送密码或命令。
send "mypassword\r"
2.1参数解析
在Expect脚本中,参数可以通过argv变量来访问,这是一个列表,包含了传递给脚本的所有参数。
1)argv变量:
argv是一个列表,包含了传递给Expect脚本的所有命令行参数。例如,如果你运行脚本时输入:
expect check_logs.sh myservice myenvironment mykeyword
那么argv列表将包含[“myservice”, "myenvironment ", “mykeyword”]。
2)lindex命令:
lindex用于从列表中获取元素。语法为lindex list index,其中list是列表,index是索引(从0开始)。
设置参数:
set service [lindex $argv 0]:从argv列表中获取第一个元素,并将其赋值给service变量。这个参数表示服务名。
set environment [lindex $argv 1]:从argv列表中获取第二个元素,并将其赋值给environment 变量。这个参数表示环境。
set keyword [lindex $argv 2]:从argv列表中获取第三个元素,并将其赋值给keyword变量。这个参数表示关键词。