ユーザ用ツール

サイト用ツール


alworker:外部プログラム実行_管理

差分

この文書の現在のバージョンと選択したバージョンの差分を表示します。

この比較画面にリンクする

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