2011-02-07 22 views
8

シェルデーモンを起動してから、同じRubyスクリプト内でシェルデーモンを停止するにはどうすればよいですか?Rubyからシェルデーモンを起動および停止する方法

具体的には、私はに私のRubyスクリプトが欲しい:

    シェルコマンドを使用して、サーバー・デーモンを( rails server | shotgun |など...)を開始
  • サーバーが動作している間にいくつかのことを行います。
  • サーバーを終了します。

ルビ1.8/1.9およびunix/windowsでサポートされているすべての包含ソリューションが優先されます。 (私はforkを読んでいますが、Windowsでは動作しません)。

+0

Kernel :: forkがWindows上で動作しないという前提が正しいかどうかはわかりません。私は、Kernel :: exec、Kernel :: fork、Kernel :: systemを試してみて、彼らがどのようにふるまうかを見てみましょう。 –

+0

ヨルダン、私はWindowsを使用していません。私はちょうどウインドウ(ここのような:http://www.ruby-forum.com/topic/215939)の期待どおりに動作しないフォークの複数の言及につまずいた。 –

答えて

3

Ruby Daemons gemを強くお勧めします。私はそれがあなたが必要とするすべての機能を持っていると思います。

はそのREADMEのセクション3を確認し、任意のコード(であなたは可能性だけKernel.systemアプリ)をデーモン化することができますDaemons.call方法に特に注意を払います。ここで

+0

@Pavel:erm、yes、docsのセクション3: "他のアプリケーションからのデーモンの束を制御する" ...はい、デーモン化のためだけでなく、他のアプリケーションをデーモン化するためです! – Peter

0

は、Windowsのコマンドラインを使用して作業溶液と同様の問題だ:

https://serverfault.com/questions/35305/cmd-exe-how-to-starts-a-background-process-run-some-things-stops-background-pr

これはかなり汚れているが、それはトリックを行います。

可能であればLinuxを使用するか、基本コマンドラインツール(Git for Windowsとともにインストール)を使用してbashしてください。 bashを使用すると、ソリューションは非常に簡単です。

./script/rails server --pid server.pid & 
ruby do_your_stuff.rb 
kill `cat server.pid` 

P.S.とにかくWindowsは、Railsのための推奨環境ではありません。あなたはこのような奇妙な環境問題を解決することはないので、Linuxに切り替えることで長期的には多くの時間を節約できます。

# command to start daemon 
command = "thin start" # here starting thin server as example 
status, stdout, stderr = systemu command do |cid| 
    # do stuff here 
    # ... 

    Process.kill 9, cid # kill the daemon 
end 
0

私はピーターが提案ルビーデーモンの宝石を必要とし、代わりにsystemuを使用して終了何をする方法を見つけ出すことができませんでした)https://github.com/colinsurprenant/raad - MRI RubyとJRubyで透過的に動作します。 (私は著者です)。

+0

Daemons gemをRailsで使用するには、daemon_generatorプラグインを使用する必要があります。 http://douglasfshearer.com/blog/cron-jobs-in-ruby-on-rails –

+0

ありがとうございますが、私はRailsを使用していません。 –

0

はデーモンとして(ルビーをRaad氏の宝石を見てみましょう:

関連する問題