名前 | 形式 | 機能説明 | オプション | 拡張機能説明 | 終了ステータス | 属性 | 関連項目
一連のコマンド同期コマンドは、連動して SSP フェイルオーバーによって割り込まれたユーザー定義のスクリプトの回復を制御します。コマンドの同期を有効にするには、ユーザー定義のスクリプトに以下のコマンドを挿入します。
initcmdsync は、回復するスクリプトを識別するためのコマンド同期記述子を生成します。
この記述子は、コマンド同期リストに追加されます。この記述子によって、フェイルオーバーの後に新しいメイン SSP で再起動するスクリプトとコマンドを識別します。
savecmdsync は、フェイルオーバーの後に処理を再開できるスクリプト上の場所を特定するマーカーを追加します。
cancelcmdsync は、コマンド同期リストからコマンド同期記述子を削除します。削除することで、確実にスクリプトは一度だけ実行され、次のフェイルオーバーの後には実行されません。
スクリプトのすべての終了パスに cancelcmdsync シーケンスを記述して、コマンド同期リストから記述子を確実に削除します。記述子を削除しない状態でフェイルオーバーが起動すると、スクリプトは新しいメイン SSP で再実行されます。
コマンドの同期を有効にするには、initcmdsync と cancelcmdsync の両方のシーケンスをスクリプトに記述する必要があります。savecmdsync コマンドは省略可能ですが、処理を再開できるスクリプト上の特定の場所を指定する場合のみ使用します。
以下のオプションをサポートしています。
ユーザー定義のスクリプトを識別するコマンド同期記述子を指定します。この記述子は、initcmdsync コマンドによって返される標準出力値です。
フェイルオーバーの後に再開できるスクリプト上の場所を指定します。この識別子には、必ず正の整数を使用します。
ユーザー定義のスクリプトに関連するオプションとパラメタを指定します。これらのパラメタはスペア SSP に格納され、フェイルオーバーの後に指定されたスクリプトを再起動するときに使用されます。
同期させるユーザー定義のスクリプトの名前を指定します。
コマンド同期コマンドは、ユーザー定義スクリプトにおける決められた論理上の位置に挿入します。
たとえばKorn シェルスクリプトの場合は、以下のような構造になります。
# MAIN CODE STARTS HERE # Be sure to use a cleanup procedure to handle any interrupts. # Use the cancelcmdsync to remove the script from the command # synchronization list. Otherwise, the command will get restarted # on the new main SSP. # clean_up () { cancelcmdsync $desc exit } # Declare the clean_up function to capture system signals # and cleanup. trap "clean_up" INT HUP TERM QUIT PWR URG goto_label=1 # Process the arguments, capturing the -M marker point if provided # for arg in $*; do case $arg in -M ) goto_label=$arg;; . . . esac done # Place this script and all its parameters in the command synchronization # list, which indicates the commands to be restarted after an SSP failover. # # NOTE: The script must be executable by user ssp and reside in the same # directory on both the main and the spare SSP. If the command is not # part of the defined PATH for user ssp, the absolute filename must be # passed with the initcmdsync command. # initcmdsync script_name parameters # The marker point is stored in the goto_label variable. # Keep executing this script until all cases have been processed or an # error is detected. # while (( $goto_label != 0 )) ; do # # Each case should represent a synchronization point in the script. # case $goto_label in # # Step 1: Do something # 1 ) do_something . . . # Execute the savecmdsync command with the script's # descriptor and a unique marker to save the position. # If a failover occurs here, the commands # represented in the next goto_label (2) will be # resumed. # savecmdsync -M $(( $goto_label + 1 )) $desc goto_label=$(( $goto_label + 1 )) ;; # # Step 2: Do more things # 2 ) do_more_things . . . savecmdsync -M $(( $goto_label + 1 )) $desc goto_label=$(( $goto_label + 1 )) ;; # # Step 3: Finish the last step and set the goto_label to 0 # so that the script ends. 3 ) finish_last_step . . . goto_label=0 ;; esac done # END OF MAIN CODE # Remember to execute cancelcmdsync to remove the script from the # command synchronization list. Otherwise, the command will be restarted # after the failover. # cancelcmdsync $desc |
以下の終了ステータスが返されます。
正常に終了しました。
エラーが発生しました。
initcmdsync に対する標準出力は、コマンド同期記述子で構成されます。また、フェイルオーバーが起動しない場合 (フェイルオーバーの後、または シングルSSP環境の場合) は、同期コマンドを含むスクリプトによってプラットフォームログファイルにエラーメッセージが生成され、0 以外の終了コードが返されます。このエラーメッセージは、無視しても問題はありません。
以下の属性の記述子については、attributes(5) を参照してください。
属性タイプ |
属性値 |
---|---|
Architecture |
すべて |
Availability |
SUNWuessp |
Stability |
Evolving |
MT-Level |
Safe |
runcmdsync(1M), showcmdsync(1M)
ディレクトリ /opt/SUNWssp/examles/cmdsync の (同期コマンドを含む) ユーザー定義スクリプトの例