Rubyでのバックグラウンド・プロセスをスポーン
-
22-09-2019 - |
質問
私は学校のプロジェクトのためにルビーのブートストラップスクリプトを書いて、このブートストラッププロセスの一部は、(適切に書かれており、機能している)のバックグラウンド・プロセスのカップルを開始することです。私は何をしたいことの線に沿って何かあります:
`/path/to/daemon1 &`
`/path/to/daemon2 &`
`/path/to/daemon3 &`
しかし、最初の呼び出しでそのブロックがdaemon1実行します。私はProcess.spawn
メソッドへの参照を見てきましたが、それは1.9+機能のようだ、と私はルビー1.8に制限されています。
私はまた別のスレッドからこれらのデーモンを実行しようとしましたが、私は私のブートストラップスクリプトが終了できるようにしたいと思います。
それでは、どのように私は私のブートストラップスクリプトをブロックしないと終了(まだバックグラウンドで実行されているデーモンを持っている)ことができるように、これらのバックグラウンド・プロセスを開始することができますか?
解決
限り、あなたはPOSIX OS上で作業しているとして、あなたはfork
とexec
を使用することができます。
fork
=サブプロセスを作成します。
exec
=別のプロセスと、現在のプロセスを置き換え
次に、あなたのメインプロセスがProcess.detach
を経て作成されたサブプロセスに興味を持っていないことを通知する必要があります。
job1 = fork do
exec "/path/to/daemon01"
end
Process.detach(job1)
...
他のヒント
擬似deamonizeに良い方法:
`((/path/to/deamon1 &)&)`
はそれ自身のシェルにプロセスをドロップします。
実際にデーモン化するための最良の方法:
`service daemon1 start`
と確認し、サーバ/ユーザーは、実際のデーモンを起動する権限を持っています。あなたのデーモンを設定するには、Linux用の「deamonize」ツールをチェックアウトします。
所属していません StackOverflow