私は小規模のWeb開発ばかりやっているので、お客様指定のサーバはFTPでしかアクセスできないなんて事もザラにある。そんな時に使う、FTPの自動化方法。システムインストール後にログファイルを取る時に使っています。
(システムリリースは、さすがに自動化するとドキドキしてしまうので、毎回手動でやる。)
ログイン情報の準備 .netrc
まず、パスワードをいちいちインタラクティブに入力しなくて済むように、~/.netrcにサーバ情報を記載しておく。
.netrc の中身
~/.netrc には、machine 行で始まるブロックにそのホスト用のユーザ名とパスワードを記載しておく。複数のホストの記載も可能。太字が変更する部分。
login myUserName
password password
.netrc のパーミッション
作成したファイルは、自分だけ読み書き可能なパーミッションを付けておく。
FTP ファイル転送の自動化
ファイル転送のシナリオを書く
次に、FTPのシナリオを書く。1回の接続で行うファイル転送のコマンドを1つのファイルに保存する。
1回処理を全て手動で行い動作確認しながらコマンドのファイルを作成する。
例えば以下のようになる。
open some.host.jp
get /logs/access_log access_log
bye
自動化FTPの実行
実行する時は、以下のようにファイルの中身を ftp コマンドに渡す。
自動化したFTPでのファイル転送をcronで実行する場合のシェルスクリプト
ダウンロードしたファイルは、何も指定していないとカレントディレクトリに保存されるので、cronなどで自動実行するような場合は、簡単なシェルスクリプトを書いておくと使い回しが楽。
以下は、サーバからWebサーバのログを定期的にダウンロードしてくる時に使っているスクリプト。
#Webサーバログダウンロード
WORKDIR=/path/to/logcheck
DATE=`date +%Y%m%d%H%M`
cd $WORKDIR
if [ -f access_log ]; then
mv access_log access_log.bak.$DATE
fi
cat $WORKDIR/ftpcommand.txt | ftp