客户需求:在/home/installer目录下会每天生成一个目录(日期格式),需要每天定时把这些目录上传到云服务器指定目录下(FTP)
思路:crontab添加任务计划,需要自动登录ftp服务器,所以需要expect来自动输入账号密码,
解决方案:
1:下载所需要的工具包:expect,lftp(直接yum下载即可,此步忽略)
2:编辑expect脚本,vim /home/install/back.expect
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
27
28
29
30
31
32
33
34
35
36
37
|
#!/usr/bin/expect
set
FTP_IP 192.168.1.10
set
user installer
set
passwd
installer
set
timeout 15
set
date
[
exec
date
+%F ]
# 引用date时间,要不然无法获取每天日期
set
seven_ago [
exec
date
-d
"+7 day ago"
+%F ]
# 获取7天前日期,做定时删除用,"+7 day ago"必须用双引号,否则会出错
set
ftp_dir
/home/install/back
set
local_dir
/home/install
spawn
/usr/bin/lftp
$user:$
passwd
@$FTP_IP
expect {
# 切换到需要备份到ftp的目录
"*@$FTP_IP:~>"
send {
"cd $ftp_dir\r"
}
}
expect {
# 上传本地目录里的当天目录,-c是续传,-R是上传,-e是同步上传的目录里面数据,-L是把软链接内容上传
"*$ftp_dir>"
send {
"mirror -RLec $local_dir/$date\r"
}
}
expect {
# 上传本地目录里的ZIP文件
"*$ftp_dir>"
send {
"put $local_dir/$date\r"
}
}
expect {
# 删除ftp目录里7天前的目录
"*$ftp_dir>"
send {
"rm -rf $seven_ago\r"
}
}
expect eof
exit
|
3:将脚本写到任务计划里,比如每天晚上10点上传
0 22 * * * /usr/bin/expect /home/installer/back.expect
4:然后启动任务计划
/etc/init.d/crontab start
本文转自 运维小学生 51CTO博客,原文链接:http://blog.51cto.com/yasar/1874130,如需转载请自行联系原作者