為實作每天定時從其他伺服器上複制檔案到本地,需要使用crontab建立定時任務,并通過scp進行Linux之間的檔案複制。在複制檔案時,可能需要輸入目标伺服器上的密碼,通過expect即可實作。
檢查并安裝expect及tcl
說明:expect指令行工具,可在互動式操作的場景下實作複雜的自動化處理功能。expect依賴tcl。
下載下傳expect和tcl
expect和tcl的版本及具體下載下傳位址:
安裝tcl
解壓tar.gz檔案,然後進入解壓後tcl目錄(假設為:/usr/src/tcl8.4.19)。
1
2
3
4
5
安裝expect
6
7
實作功能:在遠端資料庫上執行expdp導出dmp檔案,并複制到本地指定位置。因每天都會執行,需要生成有日期字尾的檔案。
8
9
10
11
12
13
14
15
16
17
18
19
20
21
儲存以上檔案為bakbash(假設位于:/usr/local/bin/目錄),然後用chmod指令設定可執行權限:
至此,即完成了任務配置及腳本自動處理。
在/bin/bash中使用expect,可采用如下方式:
Crontab 編輯後,并不需要restart。
報錯資訊:/bin/sh: bakbash: command not found,這是因為之前将bakbash腳本放在了其他目錄下,導緻bash腳本無法找到該指令,将檔案轉移到/usr/local/bin/目錄後, 即可找到。另外,在bakbash中使用到的 expdp, expect指令,都需要有明确的路徑字首,否則也會找不到指令。這是因為crontab在執行的時候隻會定義少數環境變量而不是繼承使用者shell環境中的環境變量。