ちょっとした都合でWEB公開されているディレクトリのコピーを一日一回とって、それを別の鯖にFTPで転送!みたいなコトすることになって、まぁ客向けサービスじゃねぇしテケトーに何か書いてcronで毎晩させればイイかって感じで書いた必要最低限?っぽいアレ。
目的としては、A鯖で絶賛公開中のWEBサイトをディレクトリごとコピー取ってtar.gzに丸めてB鯖にFTP転送。転送終わったらA鯖にあるコピーはかさばるだけだから削除・・・までのシェル(day_copy.sh)と、A鯖からB鯖に転送されたコピーを7日経ったら削除するシェル(day_copy_rm)の組合せ。A鯖に(day_copy.sh)、B鯖に(day_copy_rm.sh)を置いてcronで一日一回動かす感じ。
な訳でA鯖用に書いたヤツ
day_copy.sh
#!/bin/sh
#アーカイブした年月日取得と形式指定
BK_DATE=`date '+%Y%m%d'`
#アーカイブ名
BF_DATA_NAME="day_copy-"
#アーカイブ対象のディレクトリ
BF_DIR="/service/"
#アーカイブファイルを置くディレクトリ
AF_DIR="/home/user/tmp/"
AF_DATA_NAME="${BF_DATA_NAME}-${BK_DATE}.tar.gz"
cp -R ${BF_DIR}${BF_DATA_NAME} ${AF_DIR}
tar czf ${AF_DIR}${AF_DATA_NAME} -P ${AF_DIR}${BF_DATA_NAME}
rm -Rf ${AF_DIR}${BF_DATA_NAME}
cd ${AF_DIR}
#FTPサーバー名
FTP_NAME="ftp.hoge.com"
#FTPユーザー名
FTP_USER="ftpuser"
#FTPパスワード
FTP_PASS="ftppassword"
#アップロードディレクトリ名
FTP_PATH="/home/user/copy/"
ftp -ivn ${FTP_NAME} << __END__
user ${FTP_USER} ${FTP_PASS}
passive
binary
cd ${FTP_PATH}
put ${AF_DATA_NAME}
quit
__END__
rm -f ${AF_DATA_NAME}
echo "オワタ!"
で、B鯖用のがコレ
day_copy_rm.sh
#!/bin/sh
#find対象ディレクトリ
RM_DIR="/home/user/copy/"
#削除対象日数(7日より前の日付のデータを削除)
RM_DAY="8"
find ${RM_DIR} -mtime +${RM_DAY} -exec rm -f {} \;
この二つをそれぞれの鯖でcron設定して放置。みたいなw
まー俺の都合で書いたヤツだし単純ぽいけどどこか破綻してるカモだしwそのまま使うのもアレだろうし、もっとクールでスマートなの自分で書いたほうがイイですね。
あー落描きはできてませんよ。ええ。
そんな感じ。