多くの人々がFTPを使用したファイル転送の自動化プロセスを作成してきました。これにはいくつかの異なる方法があり、その中にはより優れたものもあります。このブログでは、さまざまなアプローチについて議論し、それぞれの長所と短所を明らかにします。また、ファイルが不完全な状態で転送される原因となる問題についても取り上げます。
最も簡単な方法は、ユーザーID、パスワード、およびすべてのFTPリクエストをコマンドマクロ(図1)にまとめ、それを実行するだけです(図2)。
&attach_input |
図1 – ftp1.cm – 簡易コマンドマクロ
ftp1 |
図2 – ftp1.cm – 簡易コマンドマクロの実行
この方法の欠点は、ユーザーID、そしてより重要なパスワードがマクロの一部として平文で記述されることです。マクロにアクセスできる者なら誰でもそれを見ることができます。第二の方法として、.netrcファイルにユーザーIDとパスワードを保持する方法があります(図3)。コマンドマクロ(図4)は、実行するFTPリクエストのみを含みます(図5)。
machine 172.16.1.116 |
図3 – .netrcファイル
&attach_input |
図4 – ftp2.cm – ユーザーIDとパスワードなしのコマンドマクロ
ftp2Connected to 172.16.1.116. |
図5 – ftp2.cm – ユーザーIDとパスワードなしでコマンドマクロを実行
.netrcファイルは、所有者だけがファイルへのアクセス権を持つ場合にのみ機能します(図6)。他の誰かが読み取りアクセス権を持っている場合(図7)、機能せずパスワードプロンプトが表示されます(図8)。
display_access .netrc -all%phx_vos#m15_mas>SysAdmin>Noah_Davids>.netrc w Noah_Davids.* |
図6 – .netrcファイルの正しいアクセス制御リスト(ACL)
display_access .netrc -all%phx_vos#m15_mas>SysAdmin>Noah_Davids>.netrc w Noah_Davids.* |
図7 – .netrcファイルの不正なアクセス制御リスト
ftp2 |
図8 – .netrcのACLが間違っている場合のパスワードプロンプト
FTPマクロを作成することで、すべてのコマンドを.netrcファイルに記述できます。マクロ名を「init」と設定すると(図9)、ログイン後に自動的に実行されます。これによりVOSコマンドマクロは1行(図10)のftpコマンドのみで構成されます。 この方法の主な問題は、エラー回復機能がないことです。FTPリクエストの状態を(command_status)関数で確認できません(図11)。
machine 172.16.1.116 |
図9 – initマクロを含む.netrcファイル
ftp 172.16.1.116 |
図10 – ftp3.cm – init FTPマクロを含む.netrcファイルと併用時のマクロ
ftp3 |
図11 – ftp3.cm – initマクロ使用時の出力 – エラー回復なし
私が目にした多くのマクロは、単にディレクトリにファイルが現れるのを待機するループを実行し、ファイルが現れた際にFTPを使用して転送する(図12)。
&attach_input&label AGAIN |
図12 – ftp4.cm – ファイルの出現を待機し、その後転送を行うマクロ
この方法の問題点は、FTPがまだ開いていて書き込み中のファイルを読み取ってしまうことです。大きなファイルの場合やタイミングが悪かった場合、ファイルの一部しか転送されない結果となります(図13)。
1234567890 |
図13 – ファイルの一部のみが転送される
1234567890 |
図14 – 完全なファイル
ファイルが存在するかどうかの確認だけでは不十分であり、ファイルがロックされているかどうかも確認する必要があります(図15)。
&attach_input |
図15 – ftp5.cm – ファイル転送前にロック解除を確認する
したがって、最善の方法は、.netrcファイルにユーザーIDとパスワードを保持させ、各リクエスト後にcommand_statusを確認できるVOSコマンドマクロを用いて実際のリクエストを制御することです。また、ファイル転送前にロックされていないことを必ず確認してください。
SFTPについて疑問に思っている方もいらっしゃるでしょう。SFTPによるファイル転送の自動化は全く別物であり、次回のブログで取り上げます。
