Just another IT site ※IT系の記事は当方環境での実施内容となるため実施する場合は自己責任でお願いいたします。At Your Own Risk!! TURN BACK WHILE YOU CAN
PR

【HULFT】正常時ジョブ登録の正しい作法と、エラーハンドリングの落とし穴(Windows/Linux共通)

※IT系の記事は当方環境での実施内容となるため実施する場合は自己責任でお願いいたします。スクリプトはAI生成のものも多いのでコピー&ペーストの際は文字コードに注意ください!

HULFTの配信管理情報や集信管理情報に登録する「正常時ジョブ」。 ここに何をどう書くかによって、システムの堅牢性やトラブルシューティングのしやすさが劇的に変わります。

まずは、よくある「コマンドのベタ書き(直書き)はできるのか?」という疑問から整理していきましょう。

スポンサーリンク
バッチ処理の自動化スキルは市場価値が高いです。今の自分の単価を調べてみませんか?
顧客常駐はもう嫌だ!社内SEへ転職するなら【社内SE転職ナビ】
Cursor・Claude Code・Codex AIスキルを学ぶなら
環境構築不要!AIエージェント開発を非エンジニアでも即実践【AI Agent Camp】

🛑 コマンドや「utlsend/utlrecv」のベタ書きは可不可?

管理画面のジョブ入力欄に、Windowsの copy や Linuxの cp、あるいはHULFT自身の転送コマンド(utlsend / utlrecv)をそのままベタ書きしたくなることがありますが、結論は以下の通りです。

1. OSコマンドのベタ書き ➔ ❌ 原則不可(動かないケースが多い)

Windowsの dircopy、Linuxのシェル組み込みコマンドなどをそのまま書くと、HULFTはジョブを実行できません。なぜなら、HULFTは指定された文字列を「実行ファイル(.exeやバイナリ)」として直接呼び出そうとするため、OSのコマンドプロンプトやシェルを経由しないコマンドは認識できないからです。

2. HULFTコマンド(utlsendなど)のベタ書き ➔ 🔺 可能だが「非推奨」

C:\HULFT Family\hulft8\bin\utlsend.exe -f ... のように、フルパスで実行ファイルを指定すればベタ書きでも動作はします。 しかし、後述する「エラーハンドリング(成否判定)」や「ログ出力」が一切できなくなるため、運用の観点からベタ書きは絶対に避けるべきとされています。

💡 【結論】必ず「バッチファイル(.bat)」や「シェルスクリプト(.sh)」を作成し、それをジョブに登録するのが正しい作法です。

⚠️ 最大の落とし穴:スクリプト内エラーとHULFTの挙動

正常時ジョブにバッチやシェルスクリプトを指定した場合、非常に恐ろしい仕様(落とし穴)が存在します。

「スクリプトの内部でエラーが発生していても、HULFT側は“正常終了”として扱ってしまうことがある」

例えば、以下のようなシェルスクリプト(Linux)を正常時ジョブとして動かしたとします。

Bash

#!/bin/bash
# ①存在しないファイルをコピーしようとしてエラーになる
cp /tmp/non_existent_file.txt /var/data/

# ②後続の処理(これは正常に動く)
echo "処理が完了しました"

このスクリプトを実行すると、①のコピー処理は当然失敗します。しかし、HULFTから見ると「スクリプト自体は最後まで走りきって(②を実行して)終了コード 0 で終わった」と判断されるため、HULFTの履歴上は「正常終了」になってしまいます。

これでは、裏でデータ連携が失敗しているのにシステムが「成功」と誤認し、重大なデータ欠落を見落とす原因になります。

🛠️ 正しい作法:スクリプト内での「エラーハンドリング」

この問題を回避するためには、バッチやシェルスクリプトの内部で「1ステップごとに処理の成功・失敗を判定し、失敗したら即座にスクリプト自体を異常コードで終了させる」というエラーハンドリングの記述が必須となります。

🐧 Linux(シェルスクリプト)の場合の書き方

各コマンドの直後に $?(直前のコマンドの終了ステータス)をチェックするか、スクリプトの先頭に set -e を記述します。

Bash

#!/bin/bash
# エラーが発生したらその時点でスクリプトを即時異常終了させる設定
set -e

# または個別にハンドリングする場合
cp /tmp/data.txt /var/data/
if [ $? -ne 0 ]; then
    echo "コピーに失敗したため、異常終了します。"
    exit 1 # HULFTに異常(1)を返す
fi

exit 0

💻 Windows(バッチファイル)の場合の書き方

IF ERRORLEVEL を使って、各コマンドの成否を判定します。

DOS

@echo off

copy C:\tmp\data.txt C:\var\data\
IF %ERRORLEVEL% NEQ 0 (
    echo コピーに失敗したため、異常終了します。
    exit /b 1
)

exit /b 0

このようにスクリプト側から exit 1 などの0以外の終了コードを明示的に返してあげることで、HULFT側も「あ、後続ジョブが失敗したな」と正しく検知し、監視システムにアラートを上げることができるようになります。

📝 まとめ

HULFTの正常時ジョブを設計・記述する際は、以下の3つの作法を徹底しましょう。

  1. コマンドやHULFTツールはベタ書きせず、必ずラッパースクリプト(.bat / .sh)を通す。

  2. スクリプト内では、コマンドごとの成否(ERRORLEVEL / $?)を必ずチェックする。

  3. 途中でエラーが起きた場合は、必ず exit 1 などでHULFTに異常を伝達する。

「動けばいいや」でベタ書きやハンドリングなしのスクリプトを登録してしまうと、本番運用が始まってから手痛いしっぺ返しを食らうことになります。ぜひ、最初の設計段階からこの作法を意識してみてくださいね!

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