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