Skip to content Skip to main navigation Skip to footer

shell: 【应用】:shell crontab定时生成oracle表的数据到txt文件,并上传到ftp

一、本人环境描述

1、oracle服务端装在win7 32位上,oracle版本为10.2.0.1.0

2、Linux为centos6.5 32位,安装在Oracle VM VirtualBox虚拟机上

3、win7上装有ftp服务

二、功能实现描述用shell的crontab命令定时执行某个.sh文件,此文件的功能已实现生成oracle表的数据到本地txt文件,并上传到ftp,必要时可记录执行日志。

2、 在centos中安装ftp客户端

3、 编写shell,实现查询oracle数据库表,并写到本地txt文件

4、 编写shell,实现上传文件到ftp

5、修改shell,打印执行日志

打印日志函数如下:

function  loginfo {
  time_flag =`date +" %Y-%m-%d %H:%M:%S >" `
  echo  " [${time_flag}] [INFO] -- $1 >"
}  

View Code

6、所有shell代码

数据表结构见【 编写shell,实现查询oracle数据库表,并写到本地txt文件

A、把打印日志函数封装成testLog.sh,代码如下:

# !/bin/bash
# #####################################################################################
# 功能:定义日志打印函数
# 用法:loginfo “日志内容”
# 版本:0.1      #作者:crazyMyWay      #日期:
# 说明:建立初版
# #####################################################################################
function  loginfo {
  time_flag =`date +" %Y-%m-%d %H:%M:%S >" `
  echo  " [${time_flag}] [INFO] -- $1 >"
}  

View Code

B、通过ftp上传文件代码封装成testFtptool.sh,如下:

# !/bin/bash
# #####################################################################################
# 功能:ftp上传/下载文件
# 用法:第一个参数put(上传)还是get(下载)文件,第二个参数为FTP服务器IP,第三、四个参数分别是用户名和密码
#       第五个参数是FTP上的工作目录,第六个是本地的目录,第七个是操作的文件名
# 例子:testFtptool.sh put|get ip_address ftp_user ftp_password ftp_dir local_dir filename
# 版本:0.1    #作者:crazyMyWay     #日期:
# 说明:建立初版
# #####################################################################################
E_NOTROOT=67
# 输出帮助信息,用法:./testFtptool.sh -h
if  [ $#  -eq 1 -a "$1>" = "-h>" ]
then
  echo  " Usage: $0 put|get ip_address ftp_user ftp_password ftp_dir local_dir filename >"
  echo  " Example:
        $0 put|get ftp服务ip ftp用户名 ftp密码 ftp目录 本地目录 文件名 >"
  exit  $E_NOTROOT
fi
 # 如果参数不等于7
if  [ $#  != 7 ]
then
  echo  " Param error: Usage: $0 put|get ip_address ftp_user ftp_password ftp_dir local_dir filename >"
  exit  $E_NOTROOT
fi
 # 进行ftp操作,ftp命令解释请查阅相关资料
ftp -v -n <<!
open  $2  21
user  $3  $4
prompt
epsv4 off
cd  $5
bin
lcd  $6
$1  $7
quit
 ! &#91;/code&#93;
<span>View Code
</div>
<p>C、主要代码testStudent.sh,如下:</p>
<div>
<img src="http://img1.tuicool.com/7JJJry.gif" />

# !/bin/bash
# #####################################################################################
# 功能:从oracle中查询数据(t_student),并写到txt文件中,以student_yyyymmdd.txt命名,
#       最后上传到ftp
# 用法:定时调度执行,每天凌晨2点执行(或直接执行)
#       注意修改:user/password@service、
#       引入testLog.sh和testFtptool.sh的路径、
#       ftp-ip、ftp-username、ftp-password、ftp上传目录、本地目录
#
# 版本:0.1      #作者:crazyMyWay      #日期:2015-03-29
# 说明:建立初版
# #####################################################################################
# 加入用户环境变量,如果不执行这句,那么在用cron命令时,
# 不会自动加载用户的环境变量,如果用到sqlplus之类命令,因此会出错
. ~/.bash_profile
 # 定义文件后缀名称yyyymmdd
filename_postfix=`date +" %Y%m%d >" `
 # 定义相关变量
oracle_user=" centos >"
oracle_pass =" centos >"
oracle_id =" win7orcl >"
current_file_dir =" /ljxd/shell-demo/oracle/ >"
current_file_name =" student_${filename_postfix}.txt >"
common_file_dir =" /ljxd/shell-demo/oracle/ >"
ftp_ip =" 192.168.56.101 >"
ftp_user =" student >"
ftp_pass =" student >"
ftp_upload_path =" /student >"
# 引入log文件
. ${common_file_dir} testLog.sh
loginfo  " generate data start........ >"
# 连接到oracle,设置相关参数,并输出数据到txt文件
sqlplus -s ${oracle_user} /${oracle_pass} @${oracle_id}  <<eof >${current_file_dir}${current_file_name}
set pages  0
set feed off
set heading off
set feedback off
set verify off
set linesize  1000
select t.id ||'# ##'||t.name||'###'||to_char(t.birthday,'yyyy-mm-dd hh24:mi:ss') from t_student t;
EOF
 # 推数据到ftp
loginfo " transfer data to ftp....... >"
.  ${common_file_dir} testFtptool.sh put ${ftp_ip}  ${ftp_user}  ${ftp_pass}  ${ftp_upload_path}  ${current_file_dir}  ${current_file_name}
# end
loginfo " generate data end......... >"  

View Code

注意目录结构,修改相关参数,运行./testStudent.sh即可

测试结果如下:

shell: 【应用】:shell crontab定时生成oracle表的数据到txt文件,并上传到ftp
shell: 【应用】:shell crontab定时生成oracle表的数据到txt文件,并上传到ftp

7、crontab命令实现定时任务

crontab -e|-l|-r

-e|-l|-r分别为编辑、查看、删除定时任务,每个用户下会有一个crontab配置文件,详细说明请查阅相关资料。

每天凌晨2点定时调度执行,并把输出日志追加到student.log文件中,crontab命令如下:

保存并退出编辑器,定时器立即生效。

原文:http://www.cnblogs.com/crazyMyWay/p/4371522.html

0 Comments

There are no comments yet

Leave a comment

Your email address will not be published.