学习Expect

Expect是什么?

Expect是一个免费的编程工具语言,用来实现自动和交互式任务进行通信,而无需人的干预。 
Expect是不断发展的,随着时间的流逝,其功能越来越强大,已经成为系统管理员的的一个强大助手。
Expect需要Tcl编程语言的支持,要在系统上运行Expect必须首先安装Tcl。

Expect工作原理

从最简单的层次来说,Expect的工作方式,就像一个通用化的Chat脚本工具。Chat脚本最早用于UUCP网络内,以用来实现计算机之间需要建立连接时进行特定的登录会话的自动化。

Chat脚本由一系列expect-send对组成:expect等待输出中,输出特定的字符, 通常是一个提示符,然后发送特定的响应。

例如,下面的Chat脚本实现,等待标准输出,出现Login:字符串,然后发送somebody作为用户名;然后等待 Password:提示符,并发出响应sillyme。

安装Expect

进入 http://www.tcl.tk/software/tcltk/8.5.html
点击 Download Tcl/Tk 8.5.8 Source Releases,选择下载 tcl8.4.19-src.tar.gz,和tk8.4.19-src.tar.gz;

1. 开始安装tcl与tk

a). 解压安装tcl8.4.19;

$tar zxvf tcl8.4.19-src.tar.gz
$cd tcl8.4.19
$cd unix
$configure
...
updating cache ./config.cache
creating ./config.status
creating Makefile
creating dltest/Makefile
creating tclConfig.sh
$make
$make install

b). 编译安装tk8.4.19;

$tar zxvf tk8.4.19-src.tar.gz
$cd tk8.4.19
$cd unix
$configure
...
updating cache ./config.cache
creating ./config.status
creating Makefile
creating dltest/Makefile
creating tclConfig.sh
$make
$make install

解压安装expect:

解压

$tar zxvf expect.tar.gz

安装

$ ./configure
checking for sin... no
checking for Tcl private headers... checking for tclInt.h... no
configure: error: Can't find Tcl private headers$ find / -name "tclInt.h"
/home/expect/tcl8.4.19/generic/tclInt.h$./configure --with-tclinclude=/home/expect/tcl8.4.19/generic/
... ...
checking for Tcl private headers... (cached) found in /home/guoq/osrc/tcl8.4.19/generic
updating cache .././config.cache
creating ./config.status
creating Makefile$make
$make install

测试脚本

#!/usr/local/bin/expect -fset ipaddress [lindex $argv 0]
set passwd [lindex $argv 1]
set timeout 30spawn ssh root@$ipaddress
expect {
"yes/no" { send "yes\r"; exp_continue}
"password:" { send "$passwd\r" }
}
expect "]*"
interact

实现自动检测另外一台服务器运行状态,并重启

haproxy_expect

expect自动检测并重启另外一台服务器上的程序的代码

#!/usr/bin/expectset ssh_user "fivetrees"
set password "123456"spawn ssh -i /root/.ssh/$ssh_user Server004.xd.comexpect_before "no)?" {
send "yes\r" }
sleep 0.5expect "Enter passphrase for key*"
send "$password\r"expect "*#"
send "/tmp/haproxy.sh\r"expect "*#"
send "echo\r"exit

haproxy.sh

#!/bin/bashThread=`ps -ef | grep haproxy | grep -v haproxy.sh | grep -v grep`if [ -z "$Thread" ]
then/tmp/haproxy_expect
fi

expect脚本远程批量管理服务器的思路解析

在linux中,使用expect脚本,实现远程批量管理服务器的方法

具体思路:

  1. expect脚本,通过rsync同步到每台服务器,或通过svn来完成,ftp方式也可以。
  2. 执行指令。
  3. 检查问题。

整个脚本的构成如下:

  1. 其中,2个配置文件,一个放IP:iplist,一个放指令config
  2. log目录下存放的是运行的日志信息;
  3. ssh-key目录下存放的是ssh私钥文件,权限必须为600;
  4. ssh.exp是expect脚本文件,需要可执行权限;
  5. update.sh是主执行程序,需要可执行权限,通过./update.sh执行,用于从iplist文件循环取值并调用expect脚本。

解析:

  1. 使用循环,将IP、端口、帐号、密码、指令输出。
  2. 合用expect 进行ssh登录,并执行指令。
  3. 可以使用ssh-key来完成这样不需要输入密码。

使用expect进行日志分析

因为不同服务的管理方法不同,上次关闭了ssh的外网登录以后,各地不断有服务器报出这样那样的问题。
主管要求:“全面检查!” 在检查中,还真发现不少问题。
最突出的问题是:很多本应该上传到中心服务器的日志,居然一直留在本机没动弹!时不时发作出来,就撑爆了根分区——这当然有分区规划不合理的问题。但在线业务,磁盘划分修改起来就不是那么方便了。

于是退而求其次,定期监控日志文件大小吧。这回expect只要du -sh一下就行了,方便的很。问题在下一步的分析。

摘举exp.log中一次循环的执行结果:
The authenticity of host '1.2.3.4 (1.2.3.4)' can't be established.
RSA key fingerprint is
bb:d5:81:e1:84:09:c5:32:f6:fb:e1:b3:d3:de:c3:53.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '1.2.3.4' (RSA) to the list of known hosts.
root@1.2.3.4's password:
4.0K /home/apache2/logs/access_log

#!/bin/bash
nk=`sed -n -e "/50M/=" exp.log`
nnk=`expr $nk - 1`
sed -n "$nnk"p"" exp.log|awk -F"'" '{print $1}'|awk -F"@" '{print $2}'

但问题是:如果同时有两台到50M呢?或者在运行到它时,已经到50M以上呢? 于是我想,以ls -sh显示大小,人眼好看,电脑不好认啊。如果用du -b,那大小相同的几率就应该小很多很多了。然后定一个阀值,进行比较循环就可以了。

#!/bin/bash
for ip in `cat ip.lst`
do
./ssh.exp $ip > /dev/null 2&>1
done
bs=400
size=`grep access exp.log | awk '{if ($1>'"$bs"'){print $1}}'`
for so in $size
do
nk=`sed -n -e "/$so/=" exp.log`
nnk=`expr $nk - 1`
sed -n "$nnk"p"" exp.log | awk -F"'" '{print $1}'|awk -F@ '{print $2}'
done

本来想用sed ‘N;s/n//g’ exp.log来合并行尾,省得调行号,但exp日志的格式因为ssh登录的提示信息不一而无法统一,只能放弃。
试验性的在ip.lst中输入了15个IP,运行结果显示出来了两个,成功。

Expect的安装与应用,及实现自动检测另外一台服务器运行状态并重启,和使用expect脚本远程批量管理服务器与日志分析相关推荐

  1. kindeditor批量上传设置_ftp如何使用,ftp如何使用,3步掌握安装及使用方法 - 批量远程桌面管理服务器、vps教程...

    有了 FTP 服务器以后,客户端就可以与其建立连接,进行登录,然后进行文件传输,并实现各种操作,如上传文件/目录.下载文件/目录.列出目录信息等操作. IIS7服务器管理工具可以批量管理.定时上传下载 ...

  2. 中国刹车片自动检测系统行业市场供需与战略研究报告

    刹车片自动检测系统市场的企业竞争态势 该报告涉及的主要国际市场参与者有AARSLEFF (AARSLEFFRAIL).Alstom.Bombardier.MERMEC.Siemens.Trimble. ...

  3. linux expect命令安装包,LINUX EXPECT的安装

    LINUX EXPECT的安装 2008-07-07 21:48:34 原创作品,允许转载,转载时请务必以超链接形式标明文章 今天同事要求在两台新装的LINUX系统上安装expect.说实话还真不知道 ...

  4. zz Expect的安装

    转载一篇靠谱的文章,按照文章所述方法一次成功.只不过我的expect二进制文件最后实在tcl的bin目录下,而不是expect的bin目录下,这个令我有些疑惑,whatever,不算什么大问题,注意一 ...

  5. Wix 安装部署教程(十六) -- 自动生成多语言文件

    Wix 安装部署教程(十六) -- 自动生成多语言文件 原文:Wix 安装部署教程(十六) -- 自动生成多语言文件 因为持续集成需要,所有项目编译完之后生成一个多语言的安装包.之前生成mst文件都是 ...

  6. Wix 安装部署教程(十二) -- 自动更新WXS文件

    原文:Wix 安装部署教程(十二) -- 自动更新WXS文件 上一篇分享了一个QuickWIX,用来对比两个工程前后的差异,但是这样还是很繁琐,而且昨天发现有Bug,目录对比有问题.这次改变做法,完全 ...

  7. [转]expect的安装

    转自:http://blog.chinaunix.net/uid-20639775-id-2453085.html Expect是在Tcl基础上创建起来的,它还提供了一些Tcl所没有的命令,它可以用来 ...

  8. expect() php,Linux expect 的安装

    expect是建立在tcl基础上的一个工具,它还提供了一些Tcl所没有的命令,它可以用来做一些linux下无法做到交互的一些命令操作,在远程管理方面发挥很大的作用. 因为expect是基于tcl的,所 ...

  9. 安装slide后Powerpoint 不自动退出的解决方案

    安装slide后Powerpoint 不自动退出的解决方案 参考文章: (1)安装slide后Powerpoint 不自动退出的解决方案 (2)https://www.cnblogs.com/zhon ...

最新文章

  1. mbstowcs 和 wcstombs函数:C语言提供的宽字符和多字节字符转换函数
  2. mysql查询网址_bootstrap+flask+mysql实现网站查询
  3. Ubuntu安装tensorflow报错:tensorflow-xx.whl not a supported wheel on this platform
  4. 配置Windows Server 2008群集
  5. SIMIS计算机联锁系统,steam游戏sim
  6. oracle内存架构(一)
  7. C# Abp框架入门系列文章(一)
  8. mac可装云服务器_转载一篇用苹果电脑mac系统配置阿里云服务器ecs的教程攻略
  9. android投屏到电脑
  10. 微信小程序大转盘抽奖
  11. Java基础_17 | Java多线程程序设计(Java中两种创建线程的方法、多线程之间的同步和互斥)
  12. IntelliJ IDEA(社区版) 背景图片、颜色、字体等设置
  13. c语言count的作用,C语言中count是什么意思?
  14. 第一次竞赛-A.质数的最大乘积
  15. HDU - 相遇周期
  16. Mysql字符串替换函数
  17. ubuntu下计划任务的实施
  18. WIN10系统打不开局域网共享
  19. 数字欺诈、信贷是2020年东南亚企业普遍面临的两大重要风险
  20. 心田花开:提升一年级学生学会写作文的5种方法

热门文章

  1. [相机原理]单反与手机是如何实现对焦的?——激光对焦的原理
  2. 信息存储单位+常见数据类型
  3. 删除论文中word的最后一页空白页
  4. netbeans使用教程_NetBeans 7.4的本机Java打包
  5. 【ML特征工程】第 8 章 :自动化特征化器:图像特征提取和深度学习
  6. 百度地图 县市轮廓例子
  7. Loal-Blance Algorithm
  8. C 二级 将长整型数s中每一位上为偶数的数依次取出, 构成一个新数放在t中。 高位仍在高位,低位仍在低位。
  9. Tebis4.0R3 基础到3+2五轴联动编程加工视频教程
  10. JPA Audit and Envers