热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

目标为实现每天定时从其他服务器上复制文件到本地,需要使用crontab建立定时任务,并通过scp进行Linux之间的文件复制。在复制文件时,可能需要输入目标服务器上的密码,通过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 
  • 安装expect
#进入expect解压后的目录
> ./configure --with-tclinclude=/usr/src/tcl8.4.19/generic/ --with-tclcOnfig=/usr/local/lib/
> make
> make install
# 安装完毕,测试expect,显示如下则成功。
> expect
expect1.1>

编写处理脚本

实现功能:在远程数据库上执行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 <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
!

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

chmod 755 bakbash

创建定时任务

crontab -l #查看当前用户的定时任务
crontab -e #编辑当前用户的定损任务
#在vi 界面,添加一行:每日凌晨2点执行bakbash脚本
0 2 * * * /usr/local/bin/bakbash

#修改crontab之后,可能需要重启cron服务
su -root password
/etc/init.d/crond restart

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

总结

  • 在/bin/bash中使用expect,可采用如下方式:
#!/bin/bash
expect <## expect命令 ##
!
  • 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


推荐阅读
  • 前言crontab是Unix和Linux用于设置周期性被执行的指令,是互联网很常用的技术,很多任务都会设置在crontab循环执行,如果不使用crontab,那么任务就是常驻程序,这对你的程序要求比较 ... [详细]
  • 服务器上的nginx使用logrotate来分割日志,设置为每天分割。但是logrotate似乎没有工作,日志并没有分割。服务器是CentOS6。为了找到原因 ... [详细]
  • 这篇文章将为大家详细讲解有关如何解析crontabphp自动运行,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。cront ... [详细]
  • Linux Shell变量初探:初始值解析与使用指南
    本文探讨了Linux Shell中变量的基本概念及其在BASH中的应用。变量是用于存储可变数据的标识符,能够代表不同的值。文章详细介绍了BASH shell的主要优势,包括强大的命令编辑能力、自动补全功能、命令别名设置、作业控制以及前后台任务管理。此外,还涵盖了编程脚本编写和通配符的使用方法,为初学者提供了全面的指导。 ... [详细]
  • 技术日志:Ansible的安装及模块管理详解 ... [详细]
  • #!binbash########################################################################## File Name : rsync_nobody.sh#  ... [详细]
  • 用.sh文件来完成任务,但现在有个项目直接用url就行。一般系统不会有crontabShell#安装crontab:yuminstallcronta ... [详细]
  • 【场景】:需要定期运行Hadoop的MapReduce【解决办法】:编写一个运行MapReduce的Shell脚本。然后使用crontab配置定时任务。【Shell脚本】 ... [详细]
  • Linux下怎么使用crontab命令
    本篇内容主要讲解“Linux下怎么使用crontab命令”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Li ... [详细]
  •   crontab命令用于设置周期性被执行的指令,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动crond进程,crond进程每分钟会定期检查是否有要执 ... [详细]
  • 1crond服务未启动crontab不是Linux内核的功能,而是依赖一个crond服务,这个服务可以启动当然也可以停止。如果停止了就无法执行任何定时任务了,解决的方法是打开它 ... [详细]
  • 今天遇到一个问题:一个python脚本命令行运行时很正常,放到crontab中就无法工作,日志也没有记录,找了半天,终于发现问题所在。在脚本最上方,程序如下:#!usr ... [详细]
  • 本文介绍了 Linux 系统中用于定期执行任务的 cron 服务及其配置方法。通过 crond 和 crontab 命令,用户可以轻松地安排系统和用户级别的周期性任务。 ... [详细]
  • 记录一次ali云线上环境jenkins被攻击挖矿的处理过程
    周六告警一个接一个,感觉极不寻常netstat-anpd执行结果如下久违的中毒感觉,查看一下各用户下的crontabcatetcpasswd|cut-f1-d:|xargs-I{} ... [详细]
  • 一,crontab服务的简介二、安装cron服务安装cron服务:--yuminstallvixie-cron--yuminstallc ... [详细]
author-avatar
绿林VS逍遥
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有