ページのトップに戻る
Systemwalker Operation Manager  リファレンスマニュアル

16.4 スクリプトの例

本節では、Systemwalkerスクリプトの記述例を2つ挙げて説明します。

例1

以下の例では、あるファイルの存在を確認し、存在していればアプリケーションを起動し、ファイルが存在しない場合は、アプリケーションを起動しない制御を行います。

【Windows版】

#
# This script is sample.
#
# check argument
# 引数の個数を判定
if { $argc == 0 } {
         # 引数の個数が0の場合は、エラーメッセージを出力
         puts stderr "file name was not specified."
         # この場合、終了コード"4"で終了
         exit 4
}
# set file name
# 引数に指定された文字列を変数"filename"に設定
set filename $argv

# check file
# 処理例外をトラップする設定
if {[catch {
        # ファイルをオープン
        set file1 [open $filename r]
   }]} {
        # 処理例外がトラップされたらエラーメッセージを出力
        puts stderr "file not found."
        # この場合、終了コード"8"で終了
        exit 8

}
# オープンしたファイルをクローズ
close $file1

# 処理例外をトラップする設定
if {[catch {
        # アプリケーションを起動し、標準出力を変数"outmsg"に格納
        set outmsg [exec cmd /c {c:¥usr¥bin¥appl001.exe}]
        # アプリケーションが標準出力へ出力したデータをジョブの標準出力へ出力
        puts stdout $outmsg
   }]} {
        # 処理例外がトラップされたらプロセスのIDや終了コードを出力
        puts stderr $errorCode
        # 処理例外がトラップされたらエラーメッセージを出力
        puts stderr $errorInfo
        # この場合、終了コード"16"で終了
        exit 16
}
# アプリケーションの実行まで正常に完了した場合は、終了コード"0"で終了
exit 0

【UNIX版】

#
# This script is sample.
#
# check argument
# 引数の個数を判定
if { $argc == 0 } {
        # 引数の個数が0の場合は、エラーメッセージを出力
        puts stderr "file name was not specified."
        # この場合、終了コード"4"で終了
        exit 4
}
# set file name
# 引数に指定された文字列を変数"filename"に設定
set filename $argv

# check file
# 処理例外をトラップする設定
if {[catch {
       # ファイルをオープン
       set file1 [open $filename r]
   }]} {
       # 処理例外がトラップされたらエラーメッセージを出力
       puts stderr "file not found."
       # この場合、終了コード"8"で終了
       exit 8
}
# オープンしたファイルをクローズ
close $file1

# 処理例外をトラップする設定
if {[catch {
       # アプリケーションを起動し、標準出力を変数"outmsg"に格納
       set outmsg [exec /usr/bin/appl001]
       # アプリケーションが標準出力へ出力したデータをジョブの標準出力へ出力
       puts stdout $outmsg
   }]} {
       # 処理例外がトラップされたらプロセスのIDや終了コードを出力
       puts stderr $errorCode
       # 処理例外がトラップされたらエラーメッセージを出力
       puts stderr $errorInfo
       # この場合、終了コード"16"で終了
       exit 16
}
# アプリケーションの実行まで正常に完了した場合は、終了コード"0"で終了
exit 0

注意

スクリプト内で実行するコマンドの標準出力について

スクリプト内で実行されるコマンドに対して、標準出力は引き継がれません。そのため、例1内のアプリケーションの起動箇所を以下のようにすると、アプリケーションの標準出力がジョブの標準出力として出力されません。

つまり、Systemwalkerスクリプトをスケジュールジョブとして実行した場合に、スクリプトから実行されるアプリケーションが出力する処理結果メッセージなどが、“前回履歴”画面で確認することができませんので、注意が必要です。

【Windows版】

if {[catch {
      # アプリケーションを起動します。
      exec cmd /c {c:¥usr¥bin¥appl001.exe}
}]} {
puts stderr $errorCode
puts stderr $errorInfo
exit 16
}
exit 0

【UNIX版】

if {[catch {
      # アプリケーションを起動します。
      exec /usr/bin/appl001
}]} {
      puts stderr $errorCode
      puts stderr $errorInfo
      exit 16
}
exit 0

例2

以下の例では、アプリケーションが処理するファイル名一覧が格納されているファイルを読み込み、ファイル内に記述されたすべてのファイル名に対して、アプリケーションを起動します。アプリケーションを起動する際には、ファイル名を引数として渡します。

【Windows版】

#
# This script is sample.
#
# check argument
# 引数の個数を判定
if { $argc == 0 } {
         # 引数の個数が0の場合は、エラーメッセージを出力
         puts stderr "file name was not specified."
         # この場合、終了コード"4"で終了
         exit 4
}

# set file name
# 引数に指定された文字列を変数"filename"に設定
set filename $argv
# check file
# 処理例外をトラップする設定
if {[catch {
       # ファイルをオープン
       set file1 [open $filename r]
   }]} {
       # 処理例外がトラップされたらエラーメッセージを出力
       puts stderr "file not found."
       # この場合、終了コード"8"で終了
       exit 8
}
# 1行読み込み、ファイルの末尾に達するまでループ
while { [gets $file1 param] != -1 } {
       # 処理例外をトラップする設定
       if {[catch {
             # アプリケーションを起動し、この際読み込んだ文字列を渡す
             # 標準出力を変数"outmsg"に格納
             set outmsg [exec cmd /c {c:¥usr¥bin¥appl002.exe} $param]
             # アプリケーションが標準出力へ出力したデータをジョブの標準出力へ出力
             puts stdout $outmsg
       }]} {
             # 処理例外がトラップされたらプロセスのIDや終了コードを出力
             puts stderr $errorCode
             # 処理例外がトラップされたらエラーメッセージを出力
             puts stderr $errorInfo
             # オープン中のファイルをクローズ
             close $file1
             # 終了コード"16"で終了
             exit 16
       }
}
# ファイルをクローズ
close $file1
# すべてのアプリケーションの実行が正常に完了した場合は、終了コード"0"で終了
exit 0

【UNIX版】

#
# This script is sample.
#
# check argument
# 引数の個数を判定
if { $argc == 0 } {
        # 引数の個数が0の場合は、エラーメッセージを出力
        puts stderr "file name was not specified."
        # この場合、終了コード"4"で終了
        exit 4
}

# set file name
# 引数に指定された文字列を変数"filename"に設定
set filename $argv
# check file
# 処理例外をトラップする設定
if {[catch {
      # ファイルをオープン
      set file1 [open $filename r]
   }]} {
      # 処理例外がトラップされたらエラーメッセージを出力
      puts stderr "file not found."
      # この場合、終了コード"8"で終了
      exit 8
}
# 1行読み込み、ファイルの末尾に達するまでループ
while { [gets $file1 param] != -1 } {
      # 処理例外をトラップする設定
      if {[catch {
            # アプリケーションを起動し、この際読み込んだ文字列を渡す
            # 標準出力を変数"outmsg"に格納
            set outmsg [exec /usr/bin/appl002 $param]
            # アプリケーションが標準出力へ出力したデータをジョブの標準出力へ出力
            puts stdout $outmsg
      }]} {
            # 処理例外がトラップされたらプロセスのIDや終了コードを出力
            puts stderr $errorCode
            # 処理例外がトラップされたらエラーメッセージを出力
            puts stderr $errorInfo
            # オープン中のファイルをクローズ
            close $file1
            # 終了コード"16"で終了
            exit 16
      }
}
# ファイルをクローズ
close $file1
# すべてのアプリケーションの実行が正常に完了した場合は、終了コード"0"で終了
exit 0