Linux下通过crontab及expect实现自动化处理
版权声明:本文为博主原创文章,未经博主允许不得转载。
目标
为实现每天定时从其他服务器上复制文件到本地,需要使用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
Linux下通过crontab及expect实现自动化处理的更多相关文章
- Linux下通过crontab及expect实现自动化处理 --亲测可用
#!/usr/bin/expect -fspawn /home/scripts/bckup.shexpect "Enter password: " send "WWQQ ...
- linux下的crontab服务
linux下的crontab服务:1.crontab 是用来让使用者在固定时间或固定间隔执行程序之用在linux平台上如果需要实现任务调度功能可以编写cron脚本来实现.以某一频率执行任务linux缺 ...
- linux下使用crontab定时备份MYSQL数据库的方法:
摘要 linux下使用crontab定时备份MYSQL数据库的方法: 只需按照下面3步做,一切都在你的掌控之下: 第一步:在服务器上配置备份目录代码: ------------------------ ...
- MySQL定时备份之使用Linux下的crontab定时备份实例
这篇文章主要介绍了使用Linux下的crontab进行MySQL定时备份的例子,需要的朋友可以参考下 复制代码代码如下: ##################################### ...
- linux下使用crontab实现定时PHP计划任务失败的原因分析
这篇文章主要介绍了linux下使用crontab实现定时PHP计划任务失败的原因分析,需要的朋友可以参考下 很多人在linux下使用crontab实现PHP执行定时任务却未能成功,不能生成缓存.本 ...
- 使用linux下的crontab定时任务跑定时脚本
使用linux下的crontab定时任务跑定时脚本 tags:定时任务 定时脚本 crontab linux定时脚本 linux 引言:应该有许多人曾经很好奇一些定时脚本是怎么做出来的.我们这次就来说 ...
- Linux 下用 crontab 设置定时执行python 程序
Linux 下用 crontab 设置定时执行python 程序 方法/步骤 1,先大概了解crontab,/etc/crontab 就是crontab 的配置文件. crontab命令详解可以查 ...
- linux下应用crontab对mysql数据库进行定时备份
linux下应用crontab对mysql数据库进行定时备份 @(编程) mysql数据库提供了备份命令mysqldump,可以结合crontab命令进行定时备份. 我写了一个mysqlbackup. ...
- Linux下的crontab定时执行任务命令详解
在LINUX中,周期执行的任务一般由cron这个守护进程来处理[ps -ef|grep cron].cron读取一个或多个配置文件,这些配置文件中包含了命令行及其调用时间.cron的配置文件称为“cr ...
随机推荐
- 7z usecaes
1. Archive without compressing 7z a -t7z -mx=0 OutputFilename InputFilename Descryption: a: command, ...
- git 入门 2
进入d盘,新建project文件, 右键,git bash here cd project 初始化 $ git init 克隆项目 $ git clone http://192.168.1.188:3 ...
- Python模块(pickle)
pickle 序列化和反序列化 序列化作用 序列化使用 cPickle使用例 Python提供一个标准的模块,称为pickle.使用它你可以在一个文件中储存任何Python对象,之后你又可以把它完整无 ...
- strtok&strsep
strtok,strtok_r,strsep--extract tokens from strings Tje strsep() function was introduced as a replac ...
- 第四篇 SQL Server代理配置数据库邮件
本篇文章是SQL Server代理系列的第四篇,详细内容请参考原文. 正如这一系列的前几篇所述,SQL Server代理作业是由一系列的作业步骤组成,每个步骤由一个独立的类型去执行.SQL Serve ...
- [GeoServer]重拾GeoServer之安装篇
GeoServer的项目是一个完整的Java(J2EE)系统,现实了OpenGIS联盟的网络功能服务器规范和网络覆盖服务器规范,并且集成了Web地图服务器. 在大三的时候WebGIS课程中老师讲解过一 ...
- UIPickerView详解
一.UIPickerView 1.UIPickerView的常见属性 // 数据源(用来告诉UIPickerView有多少列多少行) @property(nonatomic,assign) id< ...
- [chrome插件] 利滚利计算器 银行存款 基金理财 余额宝收益计算
利滚利计算在数学上是否有一个简单的公式,我不知道,但作为程序员,这个算法实现起来就是小菜一碟.作为插件发布,是因为程序确实简单,也方便Chome浏览器使用者安装.如果你也想使用一下Chrome插件,参 ...
- Android项目目录结构分析
Android项目目录结构分析 1.HelloWorld项目的目录结构1.1.src文件夹1.2.gen文件夹1.3.Android 2.1文件夹1.4.assets 1.5.res文件夹1.6.An ...
- leetcode143- Reorder List问题
题目要求: Given a singly linked list L: L0→L1→…→Ln-1→Ln, reorder it to: L0→Ln→L1→Ln-1→L2→Ln-2→… You m ...