2016-06-29 4 views
1

나는 특정 작업마다 1 분 수행 할 필요가 레일 응용 프로그램에 루비를 실행하고 있습니다. 그 일이 끝나기 전에 Rufus는 새로운 일을 시작합니다.이 일은 끝나기 전에 이전 일을 "죽입니다". Rufus가 다음 작업을 시작하기 전에 작업이 완료 될 것으로 기대하는 방법이 있습니까? 그래서 난에 WEBrick루퍼스 - 스케줄러 동시성

+1

흠. 나는 Rufus에 익숙하지 않지만 많은 일정을 잡았습니다. 대신 인터벌 작업을 할 수도 있습니다. Rufus의 문서에서 : "모든 일자리는 10 분마다"와 같은 반면, "인터벌 작업은"그렇게하고 10 분을 기다린 다음 다시 해보십시오. ""기본적으로, 그 중 하나를 예약하면 완료 될 때까지 기다린 다음 1m (또는 간격이 무엇이든간에)에 다시 일정을 계획하십시오. –

답변

0

사용하고 아직 개발

시는 :, 당신은 당신의 작업에 대한 파일 잠금 검사를 추가 할 수 있습니다. 정말 쉬워 보이는 보석이 있습니다 : https://github.com/cph/single_file.

기본적으로 SingleFile 블록에서 작업을 래핑 할 수 있으며 첫 번째 작업은 임시 파일에 잠금을 설정합니다. 다시 실행하도록 예약 할 때 이전 작업에 여전히 파일에 잠금이 설정되어 있으면 (실행이 완료되지 않음) 해당 작업이 실행되지 않습니다.

include SingleFile 

scheduler.every '1m' do 
    with_file_lock("/tmp/magic_is_happening.lock") do 
    MagicClass.poof! 
    end 
end 
0

크리스토퍼 데이비스 (Christopher Davies)의 의견은 매우 훌륭합니다. 그는 "간격"작업을 가리 킵니다.

https://github.com/jmettraux/rufus-scheduler#in-at-every-interval-cron

당신은 따라서 루퍼스 - 스케줄러는 각 실행 사이 일분으로 블록을 실행할 수 있도록

scheduler.interval '1m' do 
    # ... 
end 

을 할 수 있습니다. 당신은 문서를 아래로 더 파고 경우

노출 된 다른 기술이있다 :

https://github.com/jmettraux/rufus-scheduler#overlap--false

scheduler.every '1m', overlap: false do 
    # ... 
end 

스케줄러는 매 분마다 확인합니다. 블록이 아직 실행되고 있지 않으면 블록이 실행되고 실행 중이면 트리거되지 않으며 잠시 후 다시 확인하고 다시 확인합니다.

필요에 맞는 기술을 선택하십시오.