目次

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

alive

kill

個別機能

実行プログラムの宣言と実行

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()