1. 腳本實例
將以下腳本保存為 getftp.sh
#!/bin/bash
datesign=`date -d -95day +%Y%m%d` ftp -nv 12.2.2.28 <<!FTPRUN user user01 user01 prompt
bin
cd TXT lcd /app/info/getftp mget ${datesign}*.txt bye !FTPRUN
腳本說明:
#!/bin/bash
#表明該文本的內容為SHELL命令 datesign=`date -d -95day +%Y%m%d`
#聲明變量datesign,用來記錄需要獲取文件名中的日期標簽。 #-95day 表示距系統時間的天數,假如今天是20121123, #-2day就表示20121121。
#%Y表示年,如2012,%y也表示年,但是格式為12 #%m表示月,如11 #%d表示日,如23
#同樣,%H,%M,%S分明表示時分秒,
#以系統時間為2012年11月23日10時55分44秒為例
#`date –d -2day +%Y-%m-%d %H:%M:%S` 的值為:20121121 10:55:44 ftp -nv 12.2.2.28 <<!FTPRUN
#登錄FTP服務器,12.2.2.28表示FTP服務器的IP地址
#從!FTPRUN至代碼結束的!FTPRUN是FTP命令。 #!FTPRUN是自己隨意給的標示名 user user01 user01
#給出FTP的用戶名和密碼。此處用戶名和密碼都是:user01 Prompt
#該命令忽略FTP交互 Bin
#二進制格式傳送 cd TXT
#TXT表示數據文件在FTP服務器上的目錄。 lcd /app/info/getftp
# /app/info/getftp數據文件要下載到服務器的目錄 mget ${datesign}*.txt
#需要下載的文件,${datesign}為前面聲明的變量,*表示通配符 Bye
#FTP完成退出 !FTPRUN
2. 執行腳本使其定時調用
SHELL文件在執行時,可能會因存在特殊字符而出現問題。需要將 getftp.sh 文件轉換一下格式。 可以直接在Linux下執行(假如不能運行則可以賦予它執行的權限后在運行chmod +x ./getftp.sh):
DOS2UNIX /app/info/getftp/getftp.sh
/app/info/getftp為 getftp.sh 腳本所在目錄。
通過vi編輯器根據實際環境對腳本進行相應更改,即可進行測試。 3. 自動執行配置 在Linux下執行:
Crontab –e * 5 * * * /app/info/getftp/getftp.sh
保存退出。代碼就會在每天5:00自動運行。
附:cron調度進程說明
cron是系統主要的調度進程,可以在無需人工干預的情況下運行作業。有一個叫做crontab的命令允許用戶提交、編輯或刪除相應的作業。每一個用戶都可以有一個crontab文件來保存調度信息。可以使用它運行任意一個shell腳本或某個命令,每小時運行一次,或一周三次,這完全取決於你。每一個用戶都可以有自己的crontab文件,但在一個較大的系統中,系統管理員一般會禁止這些文件,而只在整個系統保留一個這樣的文件。系統管理員是通過cron.deny和cron.allow這兩個文件來禁止或允許用戶擁有自己的crontab文件。
crontab的域
為了能夠在特定的時間運行作業,需要了解crontab文件每個條目中各個域的意義和格式。
下面就是這些域: 第1列分鍾1~5 9
第2列小時1~2 3(0表示子夜) 第3列日1~3 1 第4列月1~1 2
第5列星期0~6(0表示星期天) 第6列要運行的命令 crontab的范例格式:
下面是c r o n t a b的格式:
分[]時[]日[]月[]星期[]要運行的命令 其中[]表示空格。
crontab文件的一個條目是從左邊讀起的,第一列是分,最后一列是要運行的命令,它位於星期的后面。在這些域中,可以用橫杠-來表示一個時間范圍,例如你希望星期一至星期五運行某個作業,那么可以在星期域使用1 - 5來表示。還可以在這些域中使用逗號“,”,例如你希望星期一和星期四運行某個作業,只需要使用1 , 4來表示。可以用星號*來表示連續的時間段。如果你對某個表示時間的域沒有特別的限定,也應該在該域填入*。該文件的每一個條目必須含有5個時間域,而且每個域之間要用空格分隔。該文件中所有的注釋行要在行首用#來表示。 crontab條目舉例
30 21* * * /apps/bin/cleanup.sh
上面的例子表示每晚的21:30運行/apps/bin目錄下的cleanup.sh。 45 4 1,10,22 * * /apps/bin/backup.sh
上面的例子表示每月1、1 0、2 2日的4:45運行/apps/bin目錄下的backup.sh。 10 1 * * 6,0 /bin/find -name "core" -exec rm {} 上面的例子表示每周六、周日的1:10運行一個find命令。 0,30 18-23 * * * /apps/bin/dbcheck.sh
上面的例子表示在每天18:00至23:00之間每隔30分鍾運行/apps/bin/目錄下的dbcheck.sh。
0 23 * * 6 /apps/bin/qtrend.sh
上面的例子表示每星期六的11:00pm運行/apps/bin目錄下的qtrend.sh。
致謝:感謝您的耐心閱讀!