FTP を自動化する方法(Unix)


私は小規模のWeb開発ばかりやっているので、お客様指定のサーバはFTPでしかアクセスできないなんて事もザラにある。そんな時に使う、FTPの自動化方法。システムインストール後にログファイルを取る時に使っています。
(システムリリースは、さすがに自動化するとドキドキしてしまうので、毎回手動でやる。)

ログイン情報の準備 .netrc

まず、パスワードをいちいちインタラクティブに入力しなくて済むように、~/.netrcにサーバ情報を記載しておく。

.netrc の中身

~/.netrc には、machine 行で始まるブロックにそのホスト用のユーザ名とパスワードを記載しておく。複数のホストの記載も可能。太字が変更する部分。

machine some.host.jp
login myUserName
password password

.netrc のパーミッション

作成したファイルは、自分だけ読み書き可能なパーミッションを付けておく。

chmod 600 ~/.netrc

FTP ファイル転送の自動化

ファイル転送のシナリオを書く

次に、FTPのシナリオを書く。1回の接続で行うファイル転送のコマンドを1つのファイルに保存する。
1回処理を全て手動で行い動作確認しながらコマンドのファイルを作成する。

例えば以下のようになる。

% cat ftpcommand.txt
open some.host.jp
get /logs/access_log access_log
bye

自動化FTPの実行

実行する時は、以下のようにファイルの中身を ftp コマンドに渡す。

cat ftpcommand.txt | ftp

自動化したFTPでのファイル転送をcronで実行する場合のシェルスクリプト

ダウンロードしたファイルは、何も指定していないとカレントディレクトリに保存されるので、cronなどで自動実行するような場合は、簡単なシェルスクリプトを書いておくと使い回しが楽。

以下は、サーバからWebサーバのログを定期的にダウンロードしてくる時に使っているスクリプト。

#!/bin/sh

#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