使用crontab与expect进行定时推送数据包

使用crontab与expect进行定时推送数据包

安装expect

yum install -y expect

编写脚本目标

  1. 本地备份:实现本地mysql数据库自动备份(每天晚上23:25执行)
  2. 推送:将本地自动备份脚本推送到目标sftp服务器的指定目录(每天晚上23:50执行)

编写expect脚本

  1. 编写本地自动备份脚本 :在/data/back下新建一个mysql.sh脚本,内容如下:
#!/bin/bash
DATE=`date +%Y%m%d_%H%M%S`
mysqldump -uroot -p******* 数据库名字>/data/back/wcm_special_${DATE}.sql

为此脚本授可执行权限:
chmod -R 755 mysql.sh

  1. 定时启动本地备份脚本:使用crontab做定时任务。
crontab -e

添加一行内容,表示每天晚上23点25分执行mysql.sh脚本

25 23 * * * /data/back/mysql.sh

重启crontab

service crond restart

3.编写expect脚本:在/data/back/目录下新建一个expect_mysql.sh脚本,脚本内容如下:

#!/usr/bin/expect -f
set date [exec date "+%Y%m%d"]

set timeout -1
spawn sftp 远程服务器访问用户名@xxx.xxx.xx.xx  #远程服务器访问用户名和ip
expect {
"*yes/no*" { send "yes\r"; exp_continue }
"*assword:" { send "远程服务器访问密码\r" } #远程服务器访问密码
}
expect "sftp>"
send "cd /map/zxwtk/mysql\r" #远程服务器推送目录
expect "sftp>"
send "lcd /data/back\r" #本地文件目录
expect "sftp>"
send "put wcm_special_${date}*.sql*()\r" #本地推送文件名(这里使用按日期匹配)
expect "sftp>"
send "ls -la\r"
expect "sftp>"
send "bye\r"
interact
exit
  1. **为expect脚本授权 **:chmod -R 755 expect_mysql.sh
  2. **测试本地expect脚本 **:在/data/back目录下,运行
./expect_mysql.sh

推送成功。

  1. 使用定时任务执行expect脚本 :编辑crontab ,
 crontab -e

增加以下语句,表示每天23点50分执行expect_mysql.sh脚本:

50 23 * * * /data/back/expect_mysql.sh
*/2 * * * * /data/back/expect_mysql.sh #方便测试,增加这一行,测试成功则删除本行,表示每两分钟执行一次脚本

观察发现数据包并没有推送过去,使用sh命令运行:
在这里插入图片描述
如上,发现报错。经过查找,发现需要设置crontab的运行目录:
6. 设置crontab的运行目录

vim /etc/crontab

在这里插入图片描述
增加红框中的内容。然后再进行测试,发现成功。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值