内容へ移動
alone-doc
ユーザ用ツール
ログイン
サイト用ツール
検索
ツール
文書の表示
バックリンク
メディアマネージャー
サイトマップ
ログイン
>
メディアマネージャー
サイトマップ
現在位置:
start
»
alworker
»
基本機能
トレース:
alworker:基本機能
この文書は読取専用です。文書のソースを閲覧することは可能ですが、変更はできません。もし変更したい場合は管理者に連絡してください。
====== AlWorker 基本機能 ====== デーモンを作る場合の最もシンプルなコードサンプル。 <file ruby sample1.rb> #!/usr/bin/env ruby require "al_worker" class Worker1 < AlWorker end worker1 = Worker1.new() worker1.daemon() </file> ===== 解説 ==== スーパークラス AlWorkerをextendして、そこへ機能を実装します。\\ コマンドラインから実行すると、すぐ終了したかのように見えますが、プログラムは常駐しています。 内部的な「識別名」を持っており、デフォルトで「al_worker」となります。 <code> $ruby -Ilib sample1.rb $ps ax | grep ruby 82918 ?? Is 0:00.00 ruby -I . sample1.rb (ruby19) $_ </code> 同じ識別名を持ったプログラムの二重起動を阻止しますので、もう一度起動しようとすると、エラーになります。 <code> $ruby -Ilib sample1.rb ERROR: Still work. $_ </code> /tmp 以下にpidファイルとログファイルが作成されます。この時ファイル名として、識別名 "al_worker"が使われます。 <code> $ls /tmp al_worker.log al_worker.pid $_ </code> プロセスの終了は、kill シグナル、もしくは後述の -k オプションによって行います。 <code> $kill `cat /tmp/al_worker.pid` $ps ax | grep ruby $_ </code> ====== 基本的なオプションの解析 ====== ===== 簡易な方法 ===== parse_option() を使うと、よく使われる起動オプションを解析し、動作に反映します。 <code ruby> worker1 = Worker1.new() worker1.parse_option() worker1.daemon() </code> ^オプション^動作^ |-p <pidfile>|PIDファイルの指定| |-l <logfile>|ログファイルの指定| |-c <conffile>|設定ファイルの指定| |-d|デバグモード。daemonにならずフォアグラウンド実行される。| |-k|常駐しているプロセスを終了させる。kill `cat /tmp/pidfile` と同等。| |-r|常駐しているプロセスを終了し、再度常駐する。| ===== OptParseと併用する方法 ===== Ruby標準ライブラリのOptParseを使ってアプリケーション独自のオプションを解析する場合は、上記のオプションを追加するメソッドが用意してあります。(v3.8以降) <code ruby> worker1 = Worker1.new() opt = OptionParser.new() worker1.append_default_option_to( opt ) # 独自オプションの追加 opt.on(....) worker1.daemon() </code> ====== 識別名の指定 ====== AlWorkerのコンストラクタに文字列を渡すことで、任意の識別名をつけることができます。 <code ruby> worker1 = Worker1.new( "ANY_NAME" ) </code> または、 <code ruby> class Worker1 < AlWorker def initialize() super( "ANY_NAME" ) end end </code> ====== イニシャライザ ====== 初期化処理にコンストラクタ(initializeメソッド)を使うこともできますが、ログが記録できない、エラー処理が弱いなど、使いにくい面があるので、イニシャライザを用意しました。\\ initialize2()というメソッドを定義すると、コンストラクタに続いて呼ばれます。\\ コンストラクタをオーバライドする場合と違い、親をsuperで呼び出す必要はありません。\\ コンストラクタは常駐前に、イニシャライザは常駐後に呼び出されるという違いがあります。\\ <code ruby> def initialize2() # any initialize code end </code> ====== 常駐の必要が無い場合 ====== フォアグラウンドで動作し、常駐の必要が無い場合は、daemonメソッドを run メソッドに変更します。 <code ruby> worker1 = Worker1.new() worker1.run() </code> ====== 設定ファイルの読み込み (v3.8以降) ====== "識別名.ini" もしくは、"識別名.yaml" というファイルが存在する場合、それを設定ファイルと判断し自動的に読み込みます。 \\ プログラムからは、@config[:key] として参照できます。 \\ 設定ファイルは、iniフォーマットもしくは、yamlフォーマットで記述し、どちらのフォーマットかは拡張子で判断します。\\ HUPシグナルで、設定ファイルを再読込します。 プログラム例 <code ruby sample2.rb> #!/usr/bin/env ruby require "al_worker" class Worker2 < AlWorker def idle_task() pp @config end end worker2 = Worker2.new("sample2") worker2.run(:exit_idle_task) </code> 例1 <code ini sample2.ini> key1=val1 key2=val2 </code> 実行結果 <code> {key1: "val1", key2: "val2"} </code> 例2 <code ini sample2.ini> [section1] key1=val1 key2=val2 [section2] key3=val3 key4=val4 </code> 実行結果 <code> {:section1=>{:key1=>"val1", :key2=>"val2"}, :section2=>{:key3=>"val3", :key4=>"val4"}} </code>
alworker/基本機能.txt
· 最終更新:
2026/06/17 14:21
by
hirohito
ページ用ツール
文書の表示
バックリンク
文書の先頭へ