6.1.10 自動運転ユーザーコマンドを作成する
コマンドを作成し,設定しておくことによって,ホストの起動時やホストの終了前などにユーザー独自の処理をすることができます。こうして作成するコマンドを「自動運転ユーザーコマンド」と呼びます。
(1) 自動運転ユーザーコマンドの仕様
自動運転ユーザーコマンドには,次の五つの種類があります。
-
自動運転開始時コマンド
-
自動システム終了前コマンド
-
終了条件監視コマンド
-
機能制限コマンド
-
電源投入時刻到達時コマンド
自動運転ユーザーコマンドを使うときは,その名称を構成定義ファイルに指定します。構成定義ファイルで指定する方法については,「6.1.11 構成定義ファイルを設定する」を参照してください。
このコマンドは,シェルスクリプトファイルか実行形式ファイルのどちらかの形式で作成します。自動運転ユーザーコマンドの一覧を次の表に示します。
なお,表中の「引数」は,実行コマンドを呼び出した時に渡される値です。どのタイミングでコマンドが呼び出されたかをこの引数で判別し,処理するように自動運転ユーザーコマンドを作成してください。
自動運転ユーザーコマンド名 |
呼び出す契機 |
コマンドの使用目的 |
引数 |
戻り値の 有効または無効 |
---|---|---|---|---|
jaomstartコマンド実行時,構成定義ファイルおよび運転スケジュール定義ファイルを取り込んだ後。 |
JP1/Power Monitorデーモンの起動時に,ユーザー独自の処理をしたい場合。 |
st |
無効 |
|
監視終了開始時刻に達した直後。 |
ホストの終了処理を開始する前に,ユーザー独自の処理をしたい場合。 |
tm |
有効 |
|
制限終了開始時刻に達した直後。 |
tr |
|||
強制終了開始時刻に達した直後。 |
tf |
|||
監視終了時のホストの終了条件成立後。 |
ホストの監視終了または制限終了で,終了条件の成立時に,ユーザー独自の処理をしたい場合。 |
m1 |
有効 |
|
制限終了時のホストの終了条件成立後。 |
m2 |
有効 |
||
監視終了の終了条件成立時。(ホストの機能制限実行後) |
監視終了の終了条件の成立時,または制限終了開始時刻にユーザー独自の処理をしたい場合。 |
r1 |
有効 |
|
制限終了開始時刻到達時。 (ホストの機能制限実行後) |
r2 |
有効 |
||
次回電源投入時刻到達時(構成定義ファイルおよび運転スケジュール定義ファイルを再読み込みしたあと)。 |
機能制限コマンドで制限した機能の回復など,次回電源投入時刻到達時にユーザー独自の処理をしたい場合。 |
np |
無効 |
自動運転ユーザーコマンドが,誤ってループした場合など,実行時間が長くなったときの対応を次の表に示します。
コマンド名 |
JP1/Power Monitorでの対応 |
---|---|
自動運転開始時コマンド 自動システム終了前コマンド 電源投入時刻到達時コマンド |
構成定義ファイルのパラメーターでコマンド実行打ち切り時間の指定があれば,その時間で打ち切る。 指定がなければ終わるまで待つ。 |
終了条件監視コマンド 機能制限コマンド |
構成定義ファイルのパラメーターでコマンド実行打ち切り時間の指定があれば,その時間で打ち切る。 指定がなければ,次の終了開始時刻(例えば,監視終了の後に制限終了開始時刻が設定されていれば,制限終了開始時刻のこと)が指定されているときは,その終了開始時刻で打ち切る。 次の終了開始時刻が指定されていなければ,終わるまで待つ。 |
自動運転ユーザーコマンドのカレントディレクトリは,「/(ルート)」ディレクトリです。
自動運転ユーザーコマンド実行時には,JP1/Power Monitorデーモンの起動情報から環境変数TZおよび環境変数LANGだけが引き継がれます。
自動運転ユーザーコマンドは,呼び出し時のJP1/Power Monitorの処理状態を引数として受け取れます。これによって,複数の自動運転ユーザーコマンドを,一つのシェルスクリプトファイルでまとめて作成できます。各自動運転ユーザーコマンドが受け取る引数については,表6-5を参照してください。
自動運転ユーザーコマンドを個別に作成した場合は,各自動運転ユーザーコマンドに引数が渡されます。自動運転開始時コマンドを例にとると,渡される引数が「st」だけなので,処理は選択できません。自動運転ユーザーコマンドをシェルスクリプトファイルでまとめて作成した場合は,呼び出し時点の状況に応じた引数が渡されます。そのため,シェルスクリプト中のif文で引数を判定すれば,選択して処理ができます。
自動運転ユーザーコマンドがJP1/Power Monitorからコマンド名と引数を受け取る方法を次に示します。
-
自動運転ユーザーコマンドがシェル言語で書かれている場合
-
$0にシェルスクリプトファイル名(コマンド名として引き渡されます)
-
$1に引数
-
-
自動運転ユーザーコマンドがC言語で書かれている場合
-
argv[0]にコマンド名
-
argv[1]に引数
-
自動運転ユーザーコマンドは,ユーザー独自の処理を実行するだけではなく,戻り値をJP1/Power Monitorに渡せます。JP1/Power Monitorは,渡された戻り値によって異なった処理をします。戻り値別の処理を次の表に示します。自動運転ユーザーコマンドの戻り値が0以外になったときの参考にしてください。
コマンド名 |
戻り値 |
意味 |
戻り値に対応するJP1/Power Monitorの処理 |
---|---|---|---|
自動システム終了前コマンド |
0 |
コマンド処理正常終了 |
後続処理を続行する。 |
8 |
自動終了抑止 |
監視終了,制限終了,および強制終了は実行しない。 |
|
上記以外 |
コマンド異常終了 |
コマンドの実行を無視して後続処理を続行する。 |
|
終了条件監視コマンド |
0 |
終了条件成立 |
ホストの終了処理をする。 |
4 |
終了条件不成立 |
再度,終了条件監視コマンドを実行する。 実行間隔はコマンド処理内で調整する。 |
|
8 |
自動終了抑止 |
ホスト終了条件が成立していても自動終了処理はしない。 |
|
12 |
強制終了 |
すぐにshutdownコマンドを実行する。 |
|
上記以外 |
コマンド異常終了 |
コマンドの実行を無視して後続処理を続行する。 |
|
機能制限コマンド |
0 |
コマンド処理正常終了 |
後続処理を続行する。 |
4 |
リトライ要求 |
再度,機能制限コマンドを実行する。 |
|
8 |
自動終了抑止 |
ホスト機能制限が成立していても自動終了処理はしない。 |
|
12 |
強制終了 |
すぐにshutdownコマンドを実行する。 |
|
上記以外 |
コマンド異常終了 |
コマンドの実行を無視して後続処理を続行する。 |
なお,戻り値が無効のコマンドの場合でも,戻り値は常に0にしておく必要があります。自動運転ユーザーコマンドからJP1/Power Monitorに戻り値を渡すときは次の方法を使います。
-
シェル言語
exitコマンド
-
C言語
exit()システムコール,またはmain関数のreturn文
(2) 自動システム終了前コマンド使用上の注意
自動システム終了前コマンドは,監視終了開始前,制限終了開始前,または強制終了開始前に,それぞれ1回だけ実行されます。
shutdownコマンドでは,ホストの終了処理を止めることはできませんが,自動システム終了前コマンドで終了処理をすれば,戻り値によって終了処理を止めることができます。
(3) 自動運転ユーザーコマンド使用上の注意
作成した自動運転ユーザーコマンドは,事前に文法チェックおよび動作確認をしてからインストールする必要があります。文法エラーを含めて,自動運転ユーザーコマンド内で発生したエラーは,JP1/Power Monitorではチェックしません。エラーが発生してもJP1/Power Monitorは続行します。
エラーメッセージなど,自動運転ユーザーコマンド内で出力される情報の出力先は,自動運転ユーザーコマンドで定義する必要があります。定義がない場合は,「/dev/console」に出力されます。
jaomstopコマンドが投入された時点で,自動運転ユーザーコマンドが実行中の場合,その自動運転ユーザーコマンドは強制終了されます。