나는 이것을 할 수있는 간단한 방법이있을 것이라고 확신하지만 그것을 찾을 수 없다.출구에서 루비 프로그램을 재실행하는 방법?
나는 루비 프로그램이 항상 실행되기를 원하기 때문에 어떤 이유로 종료되거나 종료되면 루비 프로그램이 자동으로 다시 실행되기를 원한다.
달성 방법에 대한 아이디어가 있으십니까?
고마워요 당신이 일이 자신의이 종류를 쓸 수 있지만
나는 이것을 할 수있는 간단한 방법이있을 것이라고 확신하지만 그것을 찾을 수 없다.출구에서 루비 프로그램을 재실행하는 방법?
나는 루비 프로그램이 항상 실행되기를 원하기 때문에 어떤 이유로 종료되거나 종료되면 루비 프로그램이 자동으로 다시 실행되기를 원한다.
달성 방법에 대한 아이디어가 있으십니까?
고마워요 당신이 일이 자신의이 종류를 쓸 수 있지만
, 그것은 daemons 같은 라이브러리를 시작하고 프로세스를 관리하는 것을 사용하는 것이 아마 더 낫다. 추가 정보에 표시 꽤 간단로서
:
service.rb
당신이 계속 실행하려는 기본 응용 프로그램의 진입 점입니다
require 'daemons'
Daemons.run('service.rb')
.
동일한 Ruby 프로세스에서 응용 프로그램을 강제로 다시 시작하는 방법이 효과가있는 것처럼 보일 수 있지만 나중에 혼란이 생길 수 있습니다. 프로그램에서 예외적 인 상황이 발생하여 재시작이 발생하면 즉시 새로운 예외가 발생합니다. 내부 상태가 망가 졌기 때문에 충돌이 발생합니다.
Daemons와 같은 수퍼바이저 프로세스를 사용하여 완전히 종료하고 다시 시작하면 훨씬 나아질 것입니다. 이러한 수퍼바이저는 문제가 발생할 경우 초당 수천 번의 재부팅으로 서버를 고정하지 않기 위해 재시작을 자주 제어합니다.
서버에서 사용하는 모니터로 시스템 재시작 논리가 올바르게 수행됩니다 (systemd 또는 monit은 매우 쉽게 할 수 있지만 다른 것들도 많이 있습니다).
서비스를 수행하는 경우 서비스가 너무 비싸기 때문에 매번 다시 시작하지 않으려면 소득 요청을 기다리는 이벤트 루프에 프로세스가 보관되어 있지만 일반적으로 라이브러리를 사용하여 프로토콜을 처리하므로 들어오는 요청에 대한 처리기 만 씁니다.
내 프로그램이 충돌하거나 종료 된 경우 at_exit 또는 유사한 프로그램을 사용하여 다시 전화를 걸어 프로그램을 다시 실행할 수있는 방법이 있습니까? 일종의 안전 장치. 그것은 데몬이하는 일입니까? –
아니, 이건 정말 불가능합니다, [이 봐 (http://stackoverflow.com/questions/696839/how-do-i-write-a-bash-script-to-restart-a-process -if-it-dies)를 사용하십시오. –
나는 그것을 얻었다 고 생각한다. main이라는 메인 코드 블록에서 at_exit에 'main_reboot'를 호출하고 휴식을 취한 다음 'main'을 다시 호출한다고 말했습니다. 그게 최선의 방법인지는 모르겠지만 작동하는 것 같습니다. –