2005年9月14日 星期三

讓FTP自動產生更新記錄(適用所有Linux)

 在管理FTP的人應該都會遇到一個問題,就是大家將資源分享出來後,其他人會不知道最近有什麼新的資源分享出來,而且放在哪裡,本來建了一個”更新記錄”的資料夾,讓上傳的人可以將資源上傳後,自己手動建立一個文字檔並記錄上傳了什麼資源,讓其他人可以從記錄檔知道誰上傳了什麼資源在上面,結果一位同事問我,難到不能自動產生記錄檔嗎?這個好問題可激發了我的靈感,覺得是個有趣的題目。

 首先,先解說一下我的FTP檔案結構,/ftp 為一個partition,由於每一個 partition 都會有一個 lost+found 的目錄,我不希望讓其他人登入後看到這個目錄,所以在 /ftp 中另外建立一個 ftproot/ 的子目錄,並統一將資源存放在 ftproot/ 底下。
ftp / lost+found
 |  / -rwx------ newfile.sh <搜尋新檔並產生更新記錄的 Shell Script
 |  / ftproot / drwxr-xr-x    gavin  share 01_軟體資料夾
    | / drwxrwxr-t   gavin  share 02_音樂資料夾
    | / drwxrwsrwt gavin  share 03_影音資料夾
    | / drwxrwsrwt gavin  share 04_上傳資料夾
    | / drwxr-xr-x  root    root  05_更新記錄
1. 為避免其他人登入看到 newfile.sh ,所以將此 Shell Script 存放在 /ftp 下,內容如下:
#!/bin/bash

# 搜尋 /ftp/ftproot/ 底下,一天內所新增的檔案,並以前一天的日期為檔名存放在”05_更新記錄”底下
find /ftp/ftproot -mtime -1 -type -group share -not -user root | sed "s//ftp/ftproot//g" > /ftp/ftproot/05_更新記錄/`date +%Y%m%d --date -1day`.txt
-mtime -1:搜尋修改時間在1天內
-type f:搜尋類型為檔案
-group share:搜尋群組為share
-not -user root:搜尋除了擁有者為root
sed "s//ftp/ftproot//g":由於搜尋後的路徑會包含 /ftp/ftproot/ 為了不讓其他人看見,所以用sed指令將 /ftp/ftproot 用空字元取代,而 / 前面要加註 跳脫字元。
date +%Y%m%d --date -1day:將記錄存成 YYYYMMDD.txt,”--date -1day ”為目前時間減去一天。
# 判斷記錄檔是否存在且有內容
if [ -s /ftp/ftproot/05_更新記錄/`date +%Y%m%d --date -1day`.txt ]; then
# 若有內容則將檔案轉換為MS格式

 unix2dos /ftp/ftproot/05_更新記錄/`date +%Y%m%d --date -1day`.txt > /dev/null 2>&1
else
# 若無內容則刪除

 rm /ftp/ftproot/05_更新記錄/`date +%Y%m%d --date -1day`.txt
fi
# 將超過30天以上的記錄檔刪除
find /ftp/ftproot/05_更新記錄 -mtime +30 -exec rm {} ;
2. 寫完Shell Script後,變更權限
[root@ftp ftp]# chmod 700 newfile.sh
[root@ftp ftp]# ./newfile.sh <試著執行一次看看是否在”更新記錄”目錄中有產生日期為昨天的記錄檔
3. 接下來設定crontab,設定每天 00:01 執行一次
[root@ftp ftp]#crontab -e
1 0 * * * /ftp/newfile.sh
設定完成後,接下來就讓系統每天 00:01 自動搜尋前一天有新增的檔案,並將路徑及檔名儲存在 YYYYMMDD.txt 的檔案中,若前一天沒有新增的檔案,系統還是會先搜尋一遍並產生 YYYYMMDD.txt 檔案,確定無內容後,就會將它刪除,這樣就能保持”更新記錄”的目錄中所有 YYYYMMDD.txt 是有內容的,不會因為沒有新的資源還產生空的 YYYYMMDD.txt 檔案。

沒有留言:

張貼留言