0%

写在前面

所谓分发系统,就是一个主要用来上线代码或同步文件的脚本。

对于大公司而言,使用机器少则几台,多则几十甚至上百台。如何将网站更新、扩展代码全部都发布到这些服务器上呢?这里就用到了分发系统。

expect的安装使用

准备工作:安装 expect

1
yum install -y expect

expect自动远程登录

  • 编写脚本

  • 更改脚本权限并执行
1
2
3
chmod 744 1.expect

./1.expect

expect脚本运程传递参数

编写脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
vi 1.expect

#!/usr/bin/expect
set user "root"
set passwd 123456"
spawn ssh $user@172.16.111.110

expect {
"yes/no" { send "yes\r"; exp_continue}
"password:" { send "$passwd\r" }
}
//表示图中括号里的,表示当检测到这个符号时就执行我们要执行的命令
expect "]*"
send "touch /tmp/12.txt\r"
expect "]*"
send "echo 1212 > /tmp/12.txt\r"
expect "]*"
send "exit\r"
  • 更改脚本权限并执行
1
2
3
chmod 744 2.expect

./2.expect

expect脚本传递参数

  • 编写脚本
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
vi 3.expect

增加如下脚本内容:

#!/usr/bin/expect

//把第一个参数的值赋给user
set user [lindex $argv 0]
set host [lindex $argv 1]
set passwd "123456"
set cm [lindex $argv 2]
spawn ssh $user@$host

expect {
"yes/no" { send "yes\r"}
"password:" { send "$passwd\r" }
}
expect "]*"
send "$cm\r"
//-1表示永远不超时,1表示1秒,2表示2秒,以此类推,表示执行命令几秒后停止
set timeout -1
expect "]*"
send "exit\r"
  • 更改脚本权限并执行
1
2
3
chmod 744 2.expect

./2.expect

实践项目:构建一个简易的分发系统?

需求描述:

假设有一个大公司,企业网站用PHP编写,在多台服务同时跑服务,如何将网站更新代码同步推送到各个服务器?

解决思路:

利用Shell和Expect,就能构建一个简单的分发系统,首先,准备好一台模板机器,将需要分发的文件准备好,然后只要使用expect脚本批量把需要同步的文件分发到目标机器即可。

核心命令:

1
rsync -av --files-from=list.txt / root@host:/

实现步骤:

step1:编写一个脚本文件rsync.expect

1
2
3
4
5
6
7
8
9
10
11
12
13
vim rsync.expect
#!/usr/bin/expect
# 目标机器的登录密码
set passwd "123456"
set host [lindex $argv 0]
set file [lindex $argv 1]
# 核心命令,同步多个文件
spawn rsync -avR --files-from=$file / root@$host:/
expect {
"yes/no" { send "yes\r"}
"password:" { send "$passwd\r" }
}
expect eof

更改脚本权限

chmod 744 rsync.expect

step2:编辑一个文本文件,用来放需要同步的文件列表

1
2
3
4
5
vim /tmp/list.txt
/tmp/12.txt
/root/test.sh
/tmp/test.txt
/root/expectFiles/hostFile.expect

step3: 编辑一个ip.list,用于存放需要同步的目标机器的IP地址

1
2
3
vim /tmp/ip.list
192.16.155.128
192.16.155.132

step4:编写shell脚本rsync.sh,执行同步操作

1
2
3
4
5
6
7
8
9
10
vim rsync.sh


#!/bin/bash
for ip in `cat /tmp/ip.list`
do
echo $ip
# 第二个参数就是需要同步的文件列表
./rsync.expect $ip /tmp/list.txt
done

本地执行同步:

1
sh rsync.sh

远程执行同步

编写脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
vim exe.expect
#!/usr/bin/expect
set host [lindex $argv 0]
set passwd "123456"
set cm [lindex $argv 1]
spawn ssh root@$host
expect {
"yes/no" { send "yes\r"}
"password:" { send "$passwd\r" }
}
expect "]*"
send "$cm\r"
expect "]*"
send "exit\r"

更改权限

1
chmod a+x exe.expect

需要写shell脚本exe.sh,用于执行操作

1
2
3
4
5
6
7
8
vim exe.sh
#!/bin/bash
for ip in `cat /tmp/ip.list`
do
echo $ip
# 第二个参数就是需要执行的命令
./exe.expect $ip "who;ls"
done

执行脚本

1
sh exe.sh

expect脚本同步文件

  • 准备条件:安装rsync
1
yum -y install rsync
  • 编写脚本:
1
2
3
4
5
6
7
8
9
10
11
12
 vi 4.expect

增加如下脚本内容:

#!/usr/bin/expect
set passwd "123456"
spawn rsync -av root@172.16.111.110:/tmp/12.txt /tmp/
expect {
"yes/no" { send "yes\r"}
"password:" { send "$passwd\r" }
}
expect eof
  • 执行脚本
1
2
3
chmod a+x 4.expect 

./4.expect

expect脚本指定host和要同步的文件

  • 编写脚本
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
vi 5.expect

增加如下内容:

#!/usr/bin/expect
set passwd "123456"
set host [lindex $argv 0]
set file [lindex $argv 1]
spawn rsync -av $file root@$host:$file
expect {
"yes/no" { send "yes\r"}
"password:" { send "$passwd\r" }
}
expect eof

[root@garytao-01 shell]# cat 5.expect
#!/usr/bin/expect
set passwd "123456"
set host [lindex $argv 0]
set file [lindex $argv 1]
spawn rsync -av $file root@$host:$file
expect {
"yes/no" { send "yes\r"}
"password:" { send "$passwd\r" }
}
expect eof
  • 执行脚本
1
2
3
chmod a+x 5.expect 

./5.expect

写在前面

之前学习过了zabbix监控系统的使用,但是对于一些比较冷门的监控项目,还需要手动编写脚本进行监控。这节课主要内容就是定制个性化的告警工具,并进行统一化、标准化的管理。

主要包括一下内容:

  • 告警系统整体设计;

  • 编写告警系统脚本包;

  • 运行告警系统;

阅读全文 »

写在前面

shell脚本是linux运维学习的中的重点和难点,因此把这部分放到最后来整理。主要包括:

  • shell基础知识

  • 如何编写shell脚本?

  • 采用shell编写linux告警系统

首先是第一部分,shell基础。

阅读全文 »

写在前面

这则笔记开始整理mysql的基本配置和使用知识,主要包括以下内容:

  • 初次登陆及基本设置

  • 用户管理

  • 常用语句

  • 数据库备份和恢复

  • mysql主从配置

注:部分测试是在mariaDB当中进行的。

阅读全文 »

写在前面

这则笔记主要整理lnmp相关的内容,主要包括3个部分:

  • LNMP简介

  • lnmp环境搭建

  • lnmp基础配置

系统环境:

  • linux: centos7.4

  • nginx:1.14

  • mysql:5.6

  • php:7

阅读全文 »

写在前面

这则笔记主要整理linux日志管理的相关知识,主要包括:

  • 系统日志介绍

  • 日志服务:rsyslogd

  • 日志查看:dmesg、last、lastb

  • 日志管理:journalctl

阅读全文 »