Perlを用いた自動FTP転送UNIX処方箋

現場ですぐに役立つ知識を欲するあなたに贈る珠玉のTips集。今回は、Perlの「Net::FTP」モジュールを使用した、FTP転送の自動化について解説します。

» 2008年08月15日 11時12分 公開
[ITmedia]

Solaris 9がインストールされているマシンにおいて、FTPを用い手動で特定ファイルのアップロードおよびダウンロードを行っています。これらの作業を自動で行うように設定したいのですが、何か良い方法はないでしょうか?


Perlの「Net::FTP」モジュールを使用すると、FTPを用いたファイルの自動アップロードおよびダウンロードを行えます。

「Net::FTPモジュール」のインストール

まず、「Net::FTP」モジュールのインストール状況の確認を次のように行います。

# perl -e "use Net::FTP;"


 インストールされている場合とインストールされていない場合の出力の違いは以下のとおりです。

  • インストールされている場合

# perl -e "use Net::FTP;"

#

↑メッセージなどは出力されない。プロンプトが表示される

  • インストールされていない場合

# perl -e "use Net::FTP;"

Can't locate Net/FTP.pm in ……

(以下、エラーメッセージが出力される)


「Net::FTP」モジュールのダウンロード

インストールされていない場合、「Net::FTP」モジュールを入手し、次のようにインストールします。

# gunzip libnet-1.19.tar.gz

# tar xvf libnet-1.19.tar

# cd ./libnet-1.19

# perl Makefile.PL

# make

# make test

# make install


FTP転送設定ファイルの作成

 モジュールのインストール完了後、自動でFTP転送を行うための設定ファイルftp.plを作成します(リスト5)。設定ファイルでputコマンドではなくgetコマンドを指定すると、ファイルのダウンロードを行えます。設定ファイルの詳細な説明は、こちらを参照してください

#!/bin/perl

use Net::FTP; ←perlを使用しFTPを行うことの定義

$ftp = Net::FTP -> new("*.*.*.*"); ←FTPにて任意のIPアドレス(ここでは*.*.*.*)

のマシンに接続

$ftp -> login("user","pass"); ←ユーザー名user、パスワードpassにてログイン

$ftp -> ascii; ←ASCIIモードへ変更

$ftp -> cwd ("/tmp"); ←/tmpディレクトリへ移動

$ftp -> put ("/data/test"); ←/data/testファイルをアップロード

$ftp -> quit; ←FTPを終了

exit(0);


 ftp.plを実行するには、次のようにします。

# /bin/perl /export/home/ftp.pl


FTP転送設定ファイルの自動実行

 crontabを利用し、設定ファイルの内容が毎日自動実行されるように設定します。「crontab -e」コマンドを実行し、/var/spool/cron/crontabs/rootファイルに次の内容を追記します。

1 0 * * * /bin/perl /export/home/ftp.pl


 ここでは、/export/home/ftp.plファイルを毎日0時1分に実行するよう設定しています。以上、FTPを用いたファイルの自動転送の設定は完了となります。

関連キーワード

UNIX処方箋 | FTP | Perl | Solaris


Copyright © ITmedia, Inc. All Rights Reserved.

注目のテーマ