ユーザ用ツール

サイト用ツール


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

差分

このページの2つのバージョン間の差分を表示します。

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

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