天天看点

Linux下通过crontab及expect实现自动化处理

为实现每天定时从其他服务器上复制文件到本地,需要使用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环境中的环境变量。

继续阅读