找回密码
 立即注册
  • QQ空间
  • 回复
  • 收藏

Linux系统通过expect实现网站备份shell脚本实战

admin 2019-11-4 14:49 100人围观 Linux相关



expect是一个免费的编程工具语言,主要用来实现自动和互交式任务进行通信,全过程即可实现自动化,无需手工干预。

expect几个常用命令

Ø  set timeout:设置登录超时间

Ø  spawn:启动新的进程

Ø  expect:用于从进程接收字符串

Ø  exp_continue:在expect中匹配多次

Ø  send:用于向进程发送字符串

Ø  interact:允许用户互交

Ø  exit:退出expect

项目背景

以Linux博客(http://www.majnxg.com)为例,进行网站备份。该网站采用LAMP架构,部署的系统为Linux系统;通过花生壳端口映射来实现内网穿透。

Ø  L:Linux系统

Ø  A:Apache

Ø  M:MySQL

Ø  P:PHP

具体实施

一、安装expect

    majnxg@majnxg-PC:~$ yum install expect -y     #使用yum安装expect与tcl  majnxg@majnxg-PC:~$ yum install tcl -y          majnxg@majnxg-PC:~$ whereis expect  expect: /usr/bin/expect /usr/share/man/man1/expect.1.gz  majnxg@majnxg-PC:~$ whereis tcl tcl: /usr/lib64/tcl8.5 /usr/share/tcl8.5
    测试expect是否安装成功
      majnxg@majnxg-PC:~$ whereis expectexpect: /usr/bin/expect /usr/share/man/man1/expect.1.gz majnxg@majnxg-PC:~$
      二、查看expect的bash路径
        majnxg@majnxg-PC:~$ whereis expect  expect: /usr/bin/expect /usr/share/man/man1/expect.1.gz  majnxg@majnxg-PC:~$   

        三、配置MySQL免密导出

        在服务器执行如下操作。
          root@raspberrypi:/# cd ~  root@raspberrypi:~# touch .my.cnf root@raspberrypi:~# vim .my.cnf   
          在.my.cnf隐藏文件写入的内容如下:
            [mysqldump]user=”root”password=”123456”

            四、编写WEB备份脚本

            创建linuxbackup.sh脚本
              majnxg@majnxg-PC:~$ cd /home/majnxg/shell/linuxbackup/  majnxg@majnxg-PC:~/shell/linuxbackup$ touch linuxbackup.sh majnxg@majnxg-PC:~/shell/linuxbackup$ chmod +x linuxbackup.sh   majnxg@majnxg-PC:~/shell/linuxbackup$ vim linuxbackup.sh   
              在linuxbackup.sh文件写入的内容如下:
                #!/bin/baship=192.168.1.200username="root"password="rootroot"data=$(date "+%Y%m%d")dir=$(date "+%Y%m%d")mkdir -p /home/majnxg/Linux/backup/$dir/usr/bin/expect <<EOF set timeout 30 spawn ssh $username@$ip expect {"*yes/no" { send"yes\r"; exp_continue}"*password:" { send"$password\r"} }#切换到/var/www/html/目录 expect "*#"send"cd /var/www/html\r" expect "*#"
                #备份/var/www/html/目录下的所有文件 expect "*#"send"tar -cvzf linuxbackup$data.tar.gz *\r" expect "*#"
                expect "*#"send"mkdir -p /var/www/linuxbackup/$dir\r" expect "*#"
                expect "*#"send"mv /var/www/html/linuxbackup$data.tar.gz /var/www/linuxbackup/$dir\r" expect "*#"
                #备份MySQL数据库的wordpress表 expect "*#"send"/usr/bin/mysqldump -u root wordpress>/var/www/linuxbackup/$dir/wordpressDBbackup$data.dump\r" expect "*#"
                #下载wordpress数据库与Linux博客的备份文件 spawn scp $username@$ip:/var/www/linuxbackup/$dir/{linuxbackup$data.tar.gz,wordpressDBbackup$data.dump} /home/majnxg/Linux/backup/$dir expect "$username@$ip's password:"send"$password\r"
                send"exit\r"
                expect eofEOF



                END

                呐,等你关注都等出蜘蛛网了~






                ----------------------------------------------------------------------------------------------------------------------
                我们尊重原创,也注重分享,文章来源于微信公众号:Linux开源知识积累,建议关注公众号查看原文。如若侵权请联系qter@qter.org。
                ----------------------------------------------------------------------------------------------------------------------

                鲜花

                握手

                雷人

                路过

                鸡蛋

                yafeilinux和他的朋友们微信公众号二维码

                微信公众号

                专注于Qt嵌入式Linux开发等。扫一扫立即关注。

                Qt开源社区官方QQ群二维码

                QQ交流群

                欢迎加入QQ群大家庭,一起讨论学习!

                我有话说......