为实现每天定时从其他服务器上复制文件到本地,需要使用crontab建立定时任务,并通过scp进行Linux之间的文件复制。在复制文件时,可能需要输入目标服务器上的密码,通过expect即可实现。
检查并安装expect及tcl
说明:expect命令行工具,可在交互式操作的场景下实现复杂的自动化处理功能。expect依赖tcl。
下载expect和tcl
expect和tcl的版本及具体下载地址:
安装tcl
解压tar.gz文件,然后进入解压后tcl目录(假设为:/usr/src/tcl8.4.19)。
1
2
3
4
5
安装expect
6
7
实现功能:在远程数据库上执行expdp导出dmp文件,并复制到本地指定位置。因每天都会执行,需要生成有日期后缀的文件。
8
9
10
11
12
13
14
15
16
17
18
19
20
21
保存以上文件为bakbash(假设位于:/usr/local/bin/目录),然后用chmod命令设置可执行权限:
至此,即完成了任务配置及脚本自动处理。
在/bin/bash中使用expect,可采用如下方式:
Crontab 编辑后,并不需要restart。
报错信息:/bin/sh: bakbash: command not found,这是因为之前将bakbash脚本放在了其他目录下,导致bash脚本无法找到该命令,将文件转移到/usr/local/bin/目录后, 即可找到。另外,在bakbash中使用到的 expdp, expect命令,都需要有明确的路径前缀,否则也会找不到命令。这是因为crontab在执行的时候只会定义少数环境变量而不是继承用户shell环境中的环境变量。