check ftp success script

zhanglei_itput發表於2010-07-14

       

        最近在做一套同步環境,用的是資料泵,由於資料泵只能在伺服器端實施,所以需要把dmp檔案ftp到相應的impdp的伺服器上,那麼我需要考慮一個問題,impdp的伺服器是定時執行任務的,但是假如這個是expdp的dmp檔案還沒有ftp過來,或者中途斷了,那麼impdp伺服器端就不應該進行同步。所以對ftp之後touch一個checkfile.log,如果判斷可以找到checkfile.log就進行impdp的工作。

     寫指令碼時候,寫了2中方案,發現第一個方案有bug,測試工作如下:

1. 方案一(錯誤)

#FTP dmp file
ftp -i -n 172.16.191.130 <   user oracle password
   bin
   prompt off
   cd /sync02
   put test.dmp
  bye
FTPFILE
 
# IMP check file 
touch /sync01/checkfile.log 
ftp -i -n 172.16.191.130 <   user oracle password
   bin
   prompt off
   cd /sync02
   put checkfile.log
  bye
FTPFILE

定時任務開始後,確認程式存在
ps -ef|grep test.sh
  oracle 14549  1864  0 11:54:00 ?         0:00 sh -c   /sync01/test.sh
  oracle 14555  7641  0 11:54:00 pts/1     0:00 grep test.sh
  oracle 14552 14549  3 11:54:00 ?         0:00 /usr/bin/sh /sync01/test.sh
ps -ef|grep ftp
  oracle 14553 14552 10 11:54:00 ?         0:00 ftp -i -n 172.16.191.130
  oracle 14582  7641  0 11:54:05 pts/1     0:00 grep ftp
此時kill掉ftp 的程式,模擬網路終端
kill -9 14553
ps -ef|grep ftp
  oracle 14682  7641  0 11:54:21 pts/1     0:00 grep ftp
ps -ef|grep test.sh
  oracle 14694  7641  1 11:54:23 pts/1     0:00 grep test.sh

  檢查impdp端是否有checkfile.log檔案
  -rw-r--r--   1 oracle     oinstall   656518200 Jul 14 11:54 test.dmp
  -rw-r--r--   1 oracle     oinstall         0 Jul 14 11:54 checkfile.log
  發現checkfile.log還是被ftp到imdp端了,說明上面的方案不可行,kill只是中斷了第一個ftp的任務,crontab會進入第二個ftp的任務繼續執行,所以更改指令碼,把2個檔案放入同一個ftp的包中,這樣的話要麼一起終端,要麼一起傳輸。

正確方案:
  touch /sync01/checkfile.log 
  #FTP dmp file
ftp -i -n 172.16.191.130 <   user oracle password
   bin
   prompt off
   cd /sync02
   mput test.dmp checkfile.log
  bye
FTPFILE

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9252210/viewspace-668008/,如需轉載,請註明出處,否則將追究法律責任。

相關文章