alworker:外部プログラム実行_管理
no way to compare when less than two revisions
差分
このページの2つのバージョン間の差分を表示します。
— | alworker:外部プログラム実行_管理 [2013/06/09 14:50] (現在) – 作成 - 外部編集 127.0.0.1 | ||
---|---|---|---|
行 1: | 行 1: | ||
+ | ====== AlWorker 外部プログラム実行/管理 ====== | ||
+ | | ||
+ | ---- | ||
+ | 外部プログラムを実行する機能です。\\ | ||
+ | 実行終了を待つことなく、自プログラムも平行して動作します。\\ | ||
+ | 同じプログラムの重複実行を防ぐことができます。\\ | ||
+ | 現在実行中か判断したり、実行を停止したりすることができます。\\ | ||
+ | |||
+ | ====== サンプル ====== | ||
+ | <file ruby program.rb> | ||
+ | require " | ||
+ | require " | ||
+ | |||
+ | class Worker1 < AlWorker | ||
+ | |||
+ | def initialize2() | ||
+ | @pgm = Program.new( " | ||
+ | @tcp = Tcp.new() | ||
+ | @tcp.run( self ) | ||
+ | end | ||
+ | |||
+ | def tcp_sleep( sock, param ) | ||
+ | result = @pgm.run | ||
+ | sock.puts result ? " SUCCESS" | ||
+ | return true | ||
+ | end | ||
+ | |||
+ | def tcp_alive( sock, param ) | ||
+ | sock.puts @pgm.alive? ? " ALIVE" : " DEAD" | ||
+ | return true | ||
+ | end | ||
+ | |||
+ | def tcp_kill( sock, param ) | ||
+ | result = @pgm.kill | ||
+ | sock.puts result ? " SUCCESS" | ||
+ | return true | ||
+ | end | ||
+ | end | ||
+ | |||
+ | server = Worker1.new() | ||
+ | server.daemon() | ||
+ | </ | ||
+ | |||
+ | ===== 解説 ===== | ||
+ | 常駐して、以下の3種類のコマンドを受け付けます。 | ||
+ | |||
+ | sleep | ||
+ | * 外部プログラム " | ||
+ | * 10秒間スリープします。 | ||
+ | * 実行できたら、SUCCESSと返します。 | ||
+ | * 実行できなければ、FAILと返します。 | ||
+ | |||
+ | alive | ||
+ | * 実行中かどうかを、ALIVE, | ||
+ | |||
+ | kill | ||
+ | * KILLシグナルを送って、停止を試みます。 | ||
+ | * シグナルを送ることができたら,SUCCESSと返します。 | ||
+ | |||
+ | ====== 個別機能 ====== | ||
+ | 実行プログラムの宣言と実行 | ||
+ | |||
+ | <code ruby> | ||
+ | pgm = Program.new( " | ||
+ | pgm.run() | ||
+ | </ | ||
+ | |||
+ | |||
+ | 即実行 | ||
+ | |||
+ | <code ruby> | ||
+ | pgm = Program.run( " | ||
+ | </ | ||
+ | |||
+ | |||
+ | 実行中か? | ||
+ | |||
+ | <code ruby> | ||
+ | pgm.alive? | ||
+ | </ | ||
+ | |||
+ | |||
+ | 実行中断 | ||
+ | |||
+ | <code ruby> | ||
+ | pgm.kill | ||
+ | Program.kill( " | ||
+ | </ | ||
+ | |||
+ | |||
+ | 実行終了を待つ | ||
+ | |||
+ | <code ruby> | ||
+ | pgm.wait() | ||
+ | pgm.wait( 5 ) # with timeout 5sec | ||
+ | </ | ||
+ | |||
+ | |||
+ | 実行終了イベント | ||
+ | |||
+ | <code ruby> | ||
+ | pgm.run() { work_at_end() } | ||
+ | </ | ||
+ | |||
+ | |||
+ | パラメータを替えながら何度も実行 | ||
+ | |||
+ | <code ruby> | ||
+ | pgm = Program.new( " | ||
+ | pgm.args = [ " | ||
+ | pgm.run() | ||
+ | pgm.wait() | ||
+ | |||
+ | pgm.args = [ " | ||
+ | pgm.run() | ||
+ | </ | ||
+ | |||
+ | |||
+ | 重複起動(mode_singleフラグを変更する方法) | ||
+ | |||
+ | <code ruby> | ||
+ | pgm1 = Program.new( " | ||
+ | pgm1.mode_single = :plural | ||
+ | pgm1.run() | ||
+ | pgm2 = Program.new( " | ||
+ | pgm2.mode_single = :plural | ||
+ | pgm2.run() | ||
+ | </ | ||
+ | |||
+ | |||
+ | 重複起動(名前を替える方法) | ||
+ | |||
+ | <code ruby> | ||
+ | pgm1 = Program.new( " | ||
+ | pgm1.name = " | ||
+ | pgm1.run() | ||
+ | pgm2 = Program.new( " | ||
+ | pgm2.name = " | ||
+ | pgm2.run() | ||
+ | </ | ||
alworker/外部プログラム実行_管理.txt · 最終更新: 2013/06/09 14:50 by hirohito