無料で使えるシステムトレードフレームワーク「Jiji」 をリリースしました!

・OANDA Trade APIを利用した、オープンソースのシステムトレードフレームワークです。
・自分だけの取引アルゴリズムで、誰でも、いますぐ、かんたんに、自動取引を開始できます。

プログラムをdaemonにする。

rubyプログラムをdaemonとして実行する方法について。

deamon化の手順

deamon化の手順については「PC覚え書き-プログラムのデーモン化」の解説が詳しい。ポイントは次の通りです。

  1. 子プロセスの生成
    • fork関数を実行して子プロセスを生成し、親プロセスを終了させる。
      • これにより、プロセスはinitプロセスグループに属するプロセスになる。
      • 次に行うsetsidは、プロセスグループリーダーで行うと失敗するので、この処理を行ってプロセスリーダーでない状態にしておく。
  2. セッションの新規作成と割り当て
      • Process.setsid関数を実行し、新規にセッションを開始して割り当てる。
  3. 子プロセスの再生成
    • fork関数を再度実行して、initプロセスグループに属するプロセスにする。
    • こうすると制御端末を設定することができなくなってよいらしい。
    • デバッグモード等で制御端末が必要な場合は実行しない。
  4. カレントディレクトリの移動
    • プロセスのカレントディレクトリを"/"に移動する
    • これを怠ると、「deamonのカレントディレクトリであるために管理者が操作できない」といったことが起こるとのこと。
    • "./foo"とかの相対パスでファイルを扱っていると、カレントディレクトリ変更後に問題になったりするので注意。
  5. umaskの設定
    • プログラムのumaskは元の設定を継承しており、何が設定されているか不定なため、再設定しておく。
  6. 標準入出力・エラー出力のクローズ
    • 親プロセスから引き継がれており、どこにリダイレクトされるかわからないため、一旦閉じる。
  7. 標準入出力・エラー出力の設定
    • 必要に応じて、deamonが使う標準入出力・エラー出力を再設定する。

rubyプログラムをdaemon化する

rubyプログラムをdaemon化する簡単な方法としては、以下があるようです。(via.koziyの日記 - Daemonize)

以下はWEBrick::Daemon.startを使ったサンプル(daemon.rb)です。

require 'webrick'

# ブロックをdaemonとして実行。
WEBrick::Daemon.start {
  loop {
    puts "test"
    sleep 5
  }
}

実行して、

$ ruby daemon.rb

psで見てみると、制御端末(tty)が割り当たってないのがわかります。

USER       PID %CPU %MEM   VSZ  RSS TTY      STAT START   TIME COMMAND
xxxx     25477  0.0  1.2  6880 3292 ?        S    13:11   0:00 ruby daemon.rb


参考:

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy