web-dev-qa-db-ja.com

Rubyでバックグラウンドプロセスを生成します

私はRuby学校プロジェクトのブートストラップスクリプトを作成しています。このブートストラッププロセスの一部は、いくつかのバックグラウンドプロセスを開始することです(これらは適切に記述され、機能します)。することは、次のようなものです:

`/path/to/daemon1 &`
`/path/to/daemon2 &`
`/path/to/daemon3 &`

ただし、daemon1を実行する最初の呼び出しでブロックされます。 Process.spawnメソッドへの参照を見たことがありますが、これは1.9以降の機能のようで、Ruby 1.8に制限されています。

また、これらのデーモンを別のスレッドから実行しようとしましたが、bootstrapスクリプトで終了できるようにしたいと思います。

bootstrapスクリプトがブロックされず終了できるようにするには、どうすればこれらのバックグラウンドプロセスを開始できますか(ただし、デーモンはバックグラウンドで実行されています)。

40
Dave DeLong

POSIX OSで作業している限り、forkおよびexecを使用できます。

fork =サブプロセスを作成します

exec =現在のプロセスを別のプロセスに置き換えます

次に、メインプロセスがProcess.detachを介して作成されたサブプロセスに興味がないことを通知する必要があります。

job1 = fork do
  exec "/path/to/daemon01"
end

Process.detach(job1)

...
67

擬似デーモン化するより良い方法:

`((/path/to/deamon1 &)&)` 

プロセスを独自のシェルにドロップします。

実際にデーモン化する最良の方法:

`service daemon1 start`

そして、サーバー/ユーザーが実際のデーモンを起動する権限を持っていることを確認してください。 Linux用の「デーモン化」ツールをチェックして、デーモンをセットアップしてください。

0
Ihate_SA_admins