【應用】: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,必要時可記錄執行日誌。

三、步驟
      1、在centos中安裝oracle客戶端並配置環境變量


      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
!
View Code

    C、主要代碼testStudent.sh,如下:

#!/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即可  

    測試結果如下:

      


      7、crontab命令實現定時任務

    crontab -e|-l|-r

    -e|-l|-r分別爲編輯、查看、刪除定時任務,每個用戶下會有一個crontab配置文件,詳細說明請查閱相關資料。

    每天凌晨2點定時調度執行,並把輸出日誌追加到student.log文件中,crontab命令如下:

    

    保存並退出編輯器,定時器立即生效。    

 

    

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章