版权声明:本文为博主原创文章,未经博主允许不得转载。

目录(?)[+]

目标

为实现每天定时从其他服务器上复制文件到本地,需要使用crontab建立定时任务,并通过scp进行Linux之间的文件复制。在复制文件时,可能需要输入目标服务器上的密码,通过expect即可实现。

步骤说明

准备工作

检查并安装expect及tcl
说明:expect命令行工具,可在交互式操作的场景下实现复杂的自动化处理功能。expect依赖tcl。

  • 下载expect和tcl
    expect和tcl的版本及具体下载地址:
    expect版本 5.43 - expect-5.43.0.tar.gz
    tcl版本 8.4.19 -tcl8.4.19-src.tar.gz

  • 安装tcl
    解压tar.gz文件,然后进入解压后tcl目录(假设为:/usr/src/tcl8.4.19)。

#进入unix子目录,并执行编译、安装
> cd unix
> ./configure
> make
> make install
  • 1
  • 2
  • 3
  • 4
  • 5
  • 1
  • 2
  • 3
  • 4
  • 5
  • 安装expect
#进入expect解压后的目录
> ./configure --with-tclinclude=/usr/src/tcl8.4.19/generic/ --with-tclconfig=/usr/local/lib/
> make
> make install
# 安装完毕,测试expect,显示如下则成功。
> expect
expect1.1>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

编写处理脚本

实现功能:在远程数据库上执行expdp导出dmp文件,并复制到本地指定位置。因每天都会执行,需要生成有日期后缀的文件。

#!/bin/bash
#获取当前日期
curr_date=$(date '+%y%m%d')
echo $curr_date #1.expdp导出,下述/home/.../bin/为expdp所在目录
export ORACLE_HOME=/home/oracle/app/oracle/product/11.2.0/dbhome_1/
/home/.../bin/expdp olduser/password@10.0.1.1/orcl directory=DATA_PUMP_DIR dumpfile=expdb_${curr_date}.dmp logfile=expdb${curr_date}.log SCHEMAS=olduser #2.复制到本地服务器
/usr/local/bin/expect <<!
spawn scp -P22 oracle@10.0.1.1:/u01/app/oracle/dpdump/expdb_${curr_date}.dmp /home/oracle/dbbackup/
#此命令后,可能需要输入远程服务器的用户密码
set timeout 300 #设置超时300秒
expect "oracle@10.0.1.1's password:"
set timeout 300
send "password\r" #发送密码
set timeout 3600 #验证通过后,远程服务器进行dump操作,耗时可能比较长
send "exit\r" #完毕后,断开连接
expect eof
!
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

保存以上文件为bakbash(假设位于:/usr/local/bin/目录),然后用chmod命令设置可执行权限:

chmod 755 bakbash
  • 1
  • 1

创建定时任务

crontab -l #查看当前用户的定时任务
crontab -e #编辑当前用户的定损任务
#在vi 界面,添加一行:每日凌晨2点执行bakbash脚本
0 2 * * * /usr/local/bin/bakbash #修改crontab之后,可能需要重启cron服务
su -root password
/etc/init.d/crond restart
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

至此,即完成了任务配置及脚本自动处理。

总结

  • 在/bin/bash中使用expect,可采用如下方式:
#!/bin/bash
expect <<!
## expect命令 ##
!
  • 1
  • 2
  • 3
  • 4
  • 1
  • 2
  • 3
  • 4
  • Crontab 编辑后,并不需要restart。
  • 报错信息:/bin/sh: bakbash: command not found,这是因为之前将bakbash脚本放在了其他目录下,导致bash脚本无法找到该命令,将文件转移到/usr/local/bin/目录后, 即可找到。另外,在bakbash中使用到的 expdp, expect命令,都需要有明确的路径前缀,否则也会找不到命令。这是因为crontab在执行的时候只会定义少数环境变量而不是继承用户shell环境中的环境变量

延伸阅读

关于expect命令的介绍,参见:
http://os.51cto.com/art/201012/240260.htm
http://blog.csdn.net/qujinhua19851006/article/details/8666324

关于Linux之间的数据传输方式(rcp/scp等)及比较,参见:
http://blog.csdn.net/qujinhua19851006/article/details/8666254

http://blog.csdn.net/pierre_/article/details/45647973

Linux下通过crontab及expect实现自动化处理的更多相关文章

  1. Linux下通过crontab及expect实现自动化处理 --亲测可用

    #!/usr/bin/expect -fspawn /home/scripts/bckup.shexpect "Enter password: "  send "WWQQ ...

  2. linux下的crontab服务

    linux下的crontab服务:1.crontab 是用来让使用者在固定时间或固定间隔执行程序之用在linux平台上如果需要实现任务调度功能可以编写cron脚本来实现.以某一频率执行任务linux缺 ...

  3. linux下使用crontab定时备份MYSQL数据库的方法:

    摘要 linux下使用crontab定时备份MYSQL数据库的方法: 只需按照下面3步做,一切都在你的掌控之下: 第一步:在服务器上配置备份目录代码: ------------------------ ...

  4. MySQL定时备份之使用Linux下的crontab定时备份实例

    这篇文章主要介绍了使用Linux下的crontab进行MySQL定时备份的例子,需要的朋友可以参考下   复制代码代码如下: ##################################### ...

  5. linux下使用crontab实现定时PHP计划任务失败的原因分析

    这篇文章主要介绍了linux下使用crontab实现定时PHP计划任务失败的原因分析,需要的朋友可以参考下   很多人在linux下使用crontab实现PHP执行定时任务却未能成功,不能生成缓存.本 ...

  6. 使用linux下的crontab定时任务跑定时脚本

    使用linux下的crontab定时任务跑定时脚本 tags:定时任务 定时脚本 crontab linux定时脚本 linux 引言:应该有许多人曾经很好奇一些定时脚本是怎么做出来的.我们这次就来说 ...

  7. Linux 下用 crontab 设置定时执行python 程序

    Linux 下用 crontab 设置定时执行python 程序 方法/步骤   1,先大概了解crontab,/etc/crontab 就是crontab 的配置文件. crontab命令详解可以查 ...

  8. linux下应用crontab对mysql数据库进行定时备份

    linux下应用crontab对mysql数据库进行定时备份 @(编程) mysql数据库提供了备份命令mysqldump,可以结合crontab命令进行定时备份. 我写了一个mysqlbackup. ...

  9. Linux下的crontab定时执行任务命令详解

    在LINUX中,周期执行的任务一般由cron这个守护进程来处理[ps -ef|grep cron].cron读取一个或多个配置文件,这些配置文件中包含了命令行及其调用时间.cron的配置文件称为“cr ...

随机推荐

  1. oracle ORA-00001:违反唯一约束条件

    --获取约束信息 select * from information_schema.constraint_column_usage---可以获取指定数据库中的所有约束的信息以及约束与列的对应关系 go ...

  2. thinkphp添加后台的构思以及添加数据功能

    先写个表单提交,这就是个简单的后台了...其实也可以通过phpadmin...phpadmin也叫后台的吧...一切都是为了更方便快捷... 先弄个模板,简单了点,就是为了了解实现的流程和原理 < ...

  3. python 之 append extend

    概述 append和extend针对python的列表 列表内的元素为对象,可以为数字.字符串.列表等等 append添加的是一个对象 extend添加一个列表 例子 append >>& ...

  4. Linux 源码安装httpd

    安装apr 下载解压apr-1.4.5 ./configure --prefix=/usr/local/apr make sudo make install 安装apr-util 下载解压apr-ut ...

  5. SHA-2 Certificate Signing Request

    To request an SSL certificate is now a SHA-2 Certificate Signing Request (CSR) is required. Using th ...

  6. 清除mstsc远程登录记录

    这里提供一串清除mstsc远程登录记录的命令 @echo off set TMP1=%cd%echo %TMP1%reg delete "HKEY_CURRENT_USER\Software ...

  7. Python xml

    第一部分:读 ######## ## # -*- coding:utf-8 -*- """ * User: not me * Date: 11-11-9 * Time: ...

  8. 4.Spring Web MVC处理请求的流程

  9. Swift游戏实战-跑酷熊猫 10 视差滚动背景

    原理 实现 勘误 “实现”的视频中有个错误,如下 背景移动时有个错误,看红色部分,近景归位时,第二张图片的下标是1 if arrBG[0].position.x + arrBG[0].frame.wi ...

  10. PostgreSQL Replication之第十章 配置Slony(3)

    10.3 复制您的第一个数据库 这个小小的介绍之后,我们可以继续前进并复制我们的第一个数据库.要做到这一点,我们可以在一个数据库实例上创建两个数据库.我们想简单地在这两个数据库之间进行复制. [ 您在 ...