2009-07-14 4 views
2

저는 제가 개발 한 응용 프로그램에서 일종의 스케줄러를 구현해야하는 경우가 종종 있습니다. 응용 프로그램은 간단한 유지 관리 작업에서 상당히 복잡한 작업까지 다양합니다.웹 기반 스케줄러 구현을 위해 어떤 접근 방법을 권장하십니까

지금까지 나의 접근 방식은 기본적으로 대기중인 명령의 배치 처리를 수행하는 cron 작업을 설정하는 것이 었습니다. 예를 들어, 5 분마다 처리해야하는 항목이 있는지 확인한 후 적절한 핸들러에 작업을 위임하는 스크립트 (나는 RubyOnRails에서 작업하기 때문에 이것은 러너 스크립트이기 때문에)를 호출합니다.

이 방법이 효과적이지만 어떤 이유로 최상의 접근 방식이 아닙니다. 당신은 뭔가를 권유 할 수 있습니까?

Ruby on Rails에서 작업하고 있지만이 토론은 RoR에만 국한되어야합니다.

감사합니다.

답변

3

여러 가지 방법이 있습니다. 최근에 개발 한 프로젝트 중 하나는 레일스 용 비동기 작업자 툴인 delayed_job입니다. 우리는 5 분마다 실행되도록 작업을 설정할 수 있으며 작업은 완료되면 다른 작업을 생성합니다.

BackgroundRB와 같은 기타 도구는 기본적으로 cron 스타일 작업자를 실제로 지원합니다.

종종 delayed_job에 새 작업을 추가하기 위해 1 분당 1 회의 레이크 작업을하는 것이 효과적입니다. 당신은 그것을 시도하고 싶을지도 모른다. 가장 탄력적이며 루비에 모든 타이머 논리를 유지하면서 초기 지연된 작업 (예 : 작업 대기열을 비울 필요가 없으므로 추한 해킹 또는 잠재적으로 손상 될 수있는 설정이 필요하지 않습니다. 이제는 모든 작업을 재설정하여 다시 설정해야합니다. 제대로 작동합니다.)

Delayed_job은 매우 쉽게 작업 할 수 있으며 매우 해킹 가능하므로 어딘가에서 시작하는 것이 좋습니다.

0

cron과 script/runner를 사용하지 않는 이유를 알 수 없습니다. 이점은 (추가적으로 요구되는) Rails 환경을 항상로드하지 않고 작업을 실행해야 할 때만로드한다는 것입니다.

단점은 현재 존재하는 cron에 달려 있다는 것입니다 ...?

+0

예, 그 단점의 일종이다. 내 자신을 호스팅하는 것은 중요하지 않지만 고객이 설치할 패키지를 제공해야하는 경우 어떻게해야합니까? – Goro

+0

crontab의 끝에 추가 할 수 있습니다 (sudo가 필요합니다) –

1

또 다른 제안은 사용자 정의 데몬을 만드는 것입니다. 이것은 당신에게 당신이 필요로하는 거의 모든 것을 할 수있는 유연성을 줄 것입니다.

그것은 우수한 Railscast의 스크린 캐스트에 덮여 있었다 - http://railscasts.com/episodes/129-custom-daemon

관련 문제