スポンサーリンク
IT全般

📦 HULFTでファイル送信バッチを作る:utlsend・utlalivecheck・タイムアウト完全ガイド

IT IT全般
この記事は約4分で読めます。

HULFTは、企業間やシステム間のファイル連携において高い信頼性を誇るミドルウェアです。GUI操作も可能ですが、業務自動化やジョブ管理ツール(JP1など)と連携するには、コマンドラインによるバッチ処理が不可欠です。

この記事では、HULFTの送信バッチを構築するために必要な以下の3つの要素を詳しく解説します:

  • utlsend:ファイル送信コマンド
  • utlalivecheck:相手先HULFTの起動確認コマンド
  • タイムアウト制御とエラーハンドリング

🧭 送信バッチの基本構成

送信バッチは、以下の流れで構成されます:

  1. 相手先HULFTが起動しているか確認(utlalivecheck
  2. ファイル送信処理を実行(utlsend
  3. 戻り値で正常終了か異常終了かを判定

この流れをバッチファイルに組み込むことで、安定したファイル送信処理が可能になります。

🧪 サンプルバッチコード(Windows)

@echo off
SET HULFTPATH="x:\HULFT Family\hulftx\bin"
SET FILEID=xxxxx
SET HOSTNAME=xxxxx
SET PORTNO=xxxxx

rem 相手先HULFTの起動確認
%HULFTPATH%\utlalivecheck -h %HOSTNAME% -p %PORTNO% -w 20
if NOT %ERRORLEVEL%==0 (
    echo 相手先HULFTが起動していません
    exit /B 8
)

rem ファイル送信
%HULFTPATH%\utlsend -f %FILEID% -sync -w 300
if %ERRORLEVEL%==0 (
    echo 正常終了
    exit /B 0
) else (
    echo 異常終了(コード:%ERRORLEVEL%)
    exit /B 9
)

🔍 utlalivecheckとは?

utlalivecheck は、相手先HULFTが起動しているかどうかを確認するコマンドです。これを使うことで、相手が停止している状態で送信を試みる無駄を防げます

主なオプション

utlalivecheck -h <ホスト名> -p <ポート番号> -w <待機秒数>
オプション説明
-h相手先のホスト名またはIPアドレス
-p通信ポート番号(HULFT設定に準拠)
-w応答待ち時間(秒)

⏱ タイムアウトの仕組みと注意点(utlsend)

utlsend には -w オプションでタイムアウト時間を設定できます。これは、送信処理が一定時間内に完了しない場合に異常終了させるための制御です。

よくあるタイムアウト原因

  • 相手先HULFTが応答しない(ネットワーク障害)
  • ファイルサイズが大きくて送信に時間がかかる
  • 相手先の受信キューが満杯で処理できない

📊 図解:送信処理とタイムアウトの流れ

[送信元] ── utlsend実行 ──▶ [HULFT通信開始]
     │                          │
     │                          ├─▶ [相手先HULFT応答待ち]
     │                          │       └─▶ 応答なし or 遅延
     │                          │
     └─▶ [タイムアウト時間経過] ──▶ 処理中断(戻り値9)

✅ 運用のベストプラクティス

項目内容
utlalivecheck の導入相手先が起動していない場合は送信をスキップ
タイムアウト時間の調整通信環境やファイルサイズに応じて -w を適切に設定
再送制御ファイルIDや送信履歴を管理し、重複送信を防止
ログ監視タイムアウト発生時は自動通知や再送判断を行う仕組みを導入

📝 まとめ

HULFTの送信バッチを安定運用するには、以下の3つが鍵です:

  • utlalivecheck で相手先の起動確認
  • utlsend -sync -w で確実な送信とタイムアウト制御
  • ログと戻り値によるエラー検知と再送判断

これらを組み合わせることで、信頼性の高いファイル連携が実現できます。HULFTは便利ですが、運用設計がその真価を引き出します。

コメント

  1. ののさん
    ご質問ありがとうございます。
    質問内容を消してしまいすいません。
    本文を上書きしてしまいました。

    設定は-w 300というオプションを入れていました。

    公式サイトを確認すると、
    https://www.hulft.com/help/ja-jp/HULFT-V8/WIN-ADM/Content/HULFT_ADM/Caution/timeout_synchronous.htm
    ・送信要求コマンドはタイムアウトで終了しますが、その後ファイル転送は継続します。
    となっているのでutlsendはタイムアウトしたがHulftは処理を継続した形になっているようです。
    ※正常終了というのは語弊がありますね。すいません。バッチは異常終了したがデータは正しく送信されたが正しいです。直しておきます。

    リターンコードは、バッチの仕様上9で返りますがエラー内容はHulftエラーコード:58 utlsend: TimeOut(58)となっております。
    ちなみにタイムアウトを設定しない場合はシステム動作環境設定のソケットリードタイムアウト値まで待つみたいです。

    以上よろしくお願いいたします

タイトルとURLをコピーしました