alworker:基本機能
no way to compare when less than two revisions
差分
このページの2つのバージョン間の差分を表示します。
次のリビジョン | |||
— | alworker:基本機能 [2014/01/08 14:09] – 外部編集 127.0.0.1 | ||
---|---|---|---|
行 1: | 行 1: | ||
+ | ====== AlWorker 基本機能 ====== | ||
+ | |||
+ | デーモンを作る場合の最もシンプルなコードサンプル。 | ||
+ | |||
+ | <file ruby base.rb> | ||
+ | # | ||
+ | |||
+ | require " | ||
+ | |||
+ | class Worker1 < AlWorker | ||
+ | end | ||
+ | |||
+ | worker1 = Worker1.new() | ||
+ | worker1.daemon() | ||
+ | </ | ||
+ | |||
+ | ===== 解説 ==== | ||
+ | スーパークラス AlWorkerをextendして、そこへ機能を実装します。\\ | ||
+ | コマンドラインから実行すると、すぐ終了したかのように見えますが、プログラムは常駐しています。 | ||
+ | 内部的な「識別名」を持っており、デフォルトで「al_worker」となります。 | ||
+ | |||
+ | < | ||
+ | $ruby -I . base.rb | ||
+ | $ps ax | grep ruby | ||
+ | 82918 ?? Is | ||
+ | $_ | ||
+ | </ | ||
+ | |||
+ | 同じ識別名を持ったプログラムの二重起動を阻止しますので、もう一度起動しようとすると、エラーになります。 | ||
+ | |||
+ | < | ||
+ | $ruby -I . base.rb | ||
+ | ERROR: Still work. | ||
+ | $_ | ||
+ | </ | ||
+ | |||
+ | /tmp 以下にpidファイルとログファイルが作成されます。この時ファイル名として、識別名 " | ||
+ | |||
+ | < | ||
+ | $ ls /tmp | ||
+ | al_worker.log | ||
+ | al_worker.pid | ||
+ | $_ | ||
+ | </ | ||
+ | |||
+ | プロセスの終了は、kill シグナルによって行います。 | ||
+ | |||
+ | < | ||
+ | $ kill `cat / | ||
+ | $ps ax | grep ruby | ||
+ | $_ | ||
+ | </ | ||
+ | |||
+ | ====== 識別名の指定 ====== | ||
+ | |||
+ | AlWorkerのコンストラクタに文字列を渡すことで、任意の識別名をつけることができます。 | ||
+ | |||
+ | <code ruby> | ||
+ | worker1 = Worker1.new( " | ||
+ | </ | ||
+ | |||
+ | または、 | ||
+ | <code ruby> | ||
+ | class Worker1 < AlWorker | ||
+ | def initialize() | ||
+ | super( " | ||
+ | end | ||
+ | end | ||
+ | </ | ||
+ | |||
+ | |||
+ | ====== イニシャライザ ====== | ||
+ | |||
+ | 初期化処理にコンストラクタ(initializeメソッド)を使うこともできますが、ログが記録できない、エラー処理が弱いなど、使いにくい面があるので、イニシャライザを用意しました。\\ | ||
+ | initialize2()というメソッドを定義すると、コンストラクタに続いて呼ばれます。\\ | ||
+ | コンストラクタをオーバライドする場合と違い、親をsuperで呼び出す必要はありません。\\ | ||
+ | コンストラクタは常駐前に、イニシャライザは常駐後に呼び出されるという違いがあります。\\ | ||
+ | |||
+ | <code ruby> | ||
+ | def initialize2() | ||
+ | # any initialize code | ||
+ | end | ||
+ | </ | ||
+ | | ||
+ | |||
+ | ====== 常駐の必要が無い場合 ====== | ||
+ | |||
+ | フォアグラウンドで動作し、常駐の必要が無い場合は、daemonメソッドを run メソッドに変更します。 | ||
+ | |||
+ | <code ruby> | ||
+ | worker1 = Worker1.new() | ||
+ | worker1.run() | ||
+ | </ | ||
+ | |||
+ | ====== 基本的なオプションの解析 ====== | ||
+ | |||
+ | parse_option() を使うと、よく使われる起動オプションを解析し、動作に反映します。\\ | ||
+ | |||
+ | <code ruby> | ||
+ | worker1 = Worker1.new() | ||
+ | worker1.parse_option() | ||
+ | worker1.daemon() | ||
+ | </ | ||
+ | |||
+ | ^オプション^動作^ | ||
+ | |-p < | ||
+ | |-l < | ||
+ | |-d|デバグモード。daemonにならずフォアグラウンド実行される。| | ||
+ | |||
alworker/基本機能.txt · 最終更新: 2022/02/04 16:35 by hirohito