ftp通信のputコマンドで553エラー
直近職場で、ftp通信によりファイルをリモートサーバ上にアップロードしてリネームするバッチPGMのエラー事象に悩まされました。
事象はftp通信のputコマンドを実行すると553エラーが発生してしまうというもの。
このエラーコードをキーにしてインターネット上でトラブルシューティング情報を探すと、見つかるのは大概「指定したパスのディレクトリやファイルに対する権限不足」によるエラーのケースです。しかし私が立ち会った事象において権限設定は問題ありませんでした。
あれこれ調べた結果、「バッチPGMがファイルアップロード先を指定する際、ftpプロトコルの仕様に沿ったURLを組み立てられていなかった」が原因とわかりました。
どういうことかというと、ftpでファイルパスを指定する方法にはローカルのファイルシステム同様に相対パスと絶対パスの2つが存在し、ftpのURLもこれに応じて異なるかたちになるのですが、バッチPGMはこれを考慮できていなかったのです:
ドメイン名の直後のスラッシュ(/)はあくまでもURLを構成するフラグメントを区切る文字でありファイルシステムのルートを表すものということでしょうか。ルートを表すにはその後ろにURIエンコードされたスラッシュ(%2f)を記載してパスを記述する必要があるのです。
もちろん相対パス(ftp接続ユーザのホームディレクトリからの相対パス)と絶対パス(ftp接続したリモートサーバのルートからの絶対パス)とでは指示す先がまったく異なります。指し先が異なれば権限どころか存在すらしないというのが普通でしょう。