質問

私は学校のプロジェクトのためにルビーのブートストラップスクリプトを書いて、このブートストラッププロセスの一部は、(適切に書かれており、機能している)のバックグラウンド・プロセスのカップルを開始することです。私は何をしたいことの線に沿って何かあります:

`/path/to/daemon1 &`
`/path/to/daemon2 &`
`/path/to/daemon3 &`
しかし、最初の呼び出しでそのブロックがdaemon1実行します。私はProcess.spawnメソッドへの参照を見てきましたが、それは1.9+機能のようだ、と私はルビー1.8に制限されています。

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

それでは、どのように私は私のブートストラップスクリプトをブロックしないと終了(まだバックグラウンドで実行されているデーモンを持っている)ことができるように、これらのバックグラウンド・プロセスを開始することができますか?

役に立ちましたか?

解決

限り、あなたはPOSIX OS上で作業しているとして、あなたはforkexecを使用することができます。

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

exec =別のプロセスと、現在のプロセスを置き換え

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

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

Process.detach(job1)

...

他のヒント

擬似deamonizeに良い方法:

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

はそれ自身のシェルにプロセスをドロップします。

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

`service daemon1 start`

と確認し、サーバ/ユーザーは、実際のデーモンを起動する権限を持っています。あなたのデーモンを設定するには、Linux用の「deamonize」ツールをチェックアウトします。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top