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 ...
随机推荐
- Android Service和Thread的关系
不少Android初学者都可能会有这样的疑惑,Service和Thread到底有什么关系呢?什么时候应该用Service,什么时候又应该用Thread?答案可能会有点让你吃惊,因为Service和Th ...
- SwipeRefreshLayout实现上拉加载下拉刷新
package com.example.swiperefreshlayoutdemo; import java.util.ArrayList;import java.util.HashMap; imp ...
- 第五篇 SQL Server安全架构和安全
本篇文章是SQL Server安全系列的第五篇,详细内容请参考原文. 架构本质上是一个数据库对象,其他对象的一个容器,在复杂的数据库中它能够很容易的管理各组对象.架构具有重要的安全功能.在这一篇你会学 ...
- ios理解 -- Pro Mutlithreading and Memory Management for iOS and OS X with ARC, Grand Central Dispatch, and Blocks
Capturing automatic variables Next, you need to learn what the “together with automatic (local) vari ...
- fail2ban使用
转子: http://www.2cto.com/Article/201406/310910.html 1.fail2ban简介: fail2ban可以监视你的系统日志,然后匹配日志的错误信息(正则式匹 ...
- [转]EntityFramework走马观花之CRUD(下)
学习Entity Framework技术期间查阅的优秀文章,出于以后方便查阅的缘故,转载至Blog,可查阅原文:http://blog.csdn.net/bitfan/article/details/ ...
- 【转】轻量级分布式 RPC 框架
第一步:编写服务接口 第二步:编写服务接口的实现类 第三步:配置服务端 第四步:启动服务器并发布服务 第五步:实现服务注册 第六步:实现 RPC 服务器 第七步:配置客户端 第八步:实现服务发现 第九 ...
- log4j使用
Spring中在src/main/resources下创建log4j.xml 或log4j.properties,在maven下打包时resources文件夹下面的文件会自动copy到WEB-INF/ ...
- DIY小能手|别买电动滑板车了,咱做一台吧
!! http://www.shoudian.org/thread-316111-1-1.html http://www.jiequer.com/html/news/xinpin/2014/1218/ ...
- [原创] hadoop学习笔记:卸载和安装jdk
一,卸载jdk 1.确定jdk版本 #rpm -qa | grep jak 可能的结果: java-1.7.0-openjdk-1.7.0.75-2.5.4.2.el7_0.x86_64 java- ...