나는 특정 작업마다 1 분 수행 할 필요가 레일 응용 프로그램에 루비를 실행하고 있습니다. 그 일이 끝나기 전에 Rufus는 새로운 일을 시작합니다.이 일은 끝나기 전에 이전 일을 "죽입니다". Rufus가 다음 작업을 시작하기 전에 작업이 완료 될 것으로 기대하는 방법이 있습니까? 그래서 난에 WEBrick루퍼스 - 스케줄러 동시성
1
A
답변
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
스케줄러는 매 분마다 확인합니다. 블록이 아직 실행되고 있지 않으면 블록이 실행되고 실행 중이면 트리거되지 않으며 잠시 후 다시 확인하고 다시 확인합니다.
필요에 맞는 기술을 선택하십시오.
흠. 나는 Rufus에 익숙하지 않지만 많은 일정을 잡았습니다. 대신 인터벌 작업을 할 수도 있습니다. Rufus의 문서에서 : "모든 일자리는 10 분마다"와 같은 반면, "인터벌 작업은"그렇게하고 10 분을 기다린 다음 다시 해보십시오. ""기본적으로, 그 중 하나를 예약하면 완료 될 때까지 기다린 다음 1m (또는 간격이 무엇이든간에)에 다시 일정을 계획하십시오. –