2011-02-07 3 views
8

쉘 데몬을 시작한 다음 동일한 Ruby 스크립트에서 어떻게 종료합니까? (| shotgun | 등등 ... rails server)Ruby에서 쉘 데몬을 시작하고 중지하는 방법

    쉘 명령으로 서버 데몬을 시작
  • :

    는에 내 루비 스크립트를 싶습니다, 더 구체적으로.
  • 서버가 실행되는 동안 몇 가지 작업을 수행하십시오.
  • 서버를 종료하십시오.

루비 1.8/1.9 및 유닉스/윈도우에서 지원되는 모든 포용 솔루션이 선호됩니다. (예를 들어 fork은 Windows에서 작동하지 않습니다.)

+0

Windows에서 Kernel :: fork가 작동하지 않는다고 가정합니다. 나는 Kernel :: exec, Kernel :: fork, Kernel :: system을 실험 해보고 그들이 어떻게 행동하는지 보았다. –

+0

요르단, 저는 Windows를 사용하지 않습니다. 방금 창문에서 예상대로 작동하지 않는 포크에 대한 여러 언급을 발견했습니다 (예 : http://www.ruby-forum.com/topic/215939). –

답변

3

Ruby Daemons gem을 적극 권장합니다. 나는 그것이 당신이 필요로하는 모든 기능을 가지고 있다고 생각한다.

README의 3 섹션을 확인하고 Daemons.call 임의의 코드를 데몬화할 수있는 방법 (특히 Kernel.system 앱만 가능)에 특히주의하십시오.

+0

@Pavel : erm, yes, docs의 섹션 3 : "다른 응용 프로그램에서 데몬 무리 제어"... 예, 일부 응용 프로그램은 데몬 시밍뿐 아니라 다른 응용 프로그램을 데몬 시밍 할 수도 있습니다! – Peter

0

여기에 윈도우 명령 줄을 사용하여 솔루션을 작업에 비슷한 문제가있다 :

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

이 매우 더럽하지만 트릭을 수행합니다.

가능하면 Linux를 사용하거나 Windows 용 Git과 함께 설치된 기본 명령 줄 도구로 bash합니다. bash를 사용하면 솔루션은 매우 간단합니다.

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

P.S. 레일즈 용 윈도우는 어쨌든 권장 환경이 아니다. 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

고마워,하지만 레일즈를 사용하지 않아. –

0

은 데몬으로 (루비를 라드 보석을 살펴보십시오 :

관련 문제