Rufus-Scheduler DaemonKit으로 Ruby 스케줄러 스크립트를 daemonized했습니다. 응용 프로그램이 상태를 저장하기 전에 TERM 또는 INT 신호를 트랩하려고합니다.Rufus-Scheduler, DaemonKit 및 트랩
DaemonKit에는 자체 trap_state (개인) 메소드가 있으며 데몬 스크립트 앞에 신호가 걸려 있으므로이 블록이 있더라도 많은 일을하지 않습니다. (어쩌면 내 구현 실수?) SIGTERM .rufus의 잠금 파일 후 여전히
의 행동이 부작용으로
DaemonKit::Application.running! do |config|
surprise = Surprise.new(interval, frequency, false)
surprise.start
config.trap('SIGINT') do #tried INT and TERM as well
puts 'Exiting'
surprise.stop
File.delete($lock)
end
end
는 CTRL-C 지금이
[daemon-kit]: DaemonKit (0.3.1) booted, now running surprise
log writing failed. can't be called from trap context
[daemon-kit]: Running signal traps for INT
log writing failed. can't be called from trap context
[daemon-kit]: Running shutdown hooks
log writing failed. can't be called from trap context
[daemon-kit]: Shutting down surprise
입니다 시작 방법은 매우 간단합니다.
def start
@scheduler = Rufus::Scheduler.new(:lockfile => $lock)
@scheduler.every '1d', :first_at => @first, :overlap => false do |job|
... # some work
end
@scheduler.join
end
def stop
# save state
@scheduler.shutdown
end
죄송 합니다만 rufus-scheduler 3.x에는 트랩이 없습니다 (rufus-scheduler 2.x는 하나이지만 특별한 SignalScheduler 구현으로 제한됨). 'File.delete ($ lock)'줄에 도달 했습니까? 도달하면 성공할 수 있습니까? 함정의 끝 부분에'Exited''를 놓으십시오. 울프 펜싱. – jmettraux
@jmettraux 우 바보입니다. DaemonKit과 Rufus가 섞였습니다. DaemonKit이 TERM을 함정에 넣고 있습니다. 내 잘못은 – blackbird
입니다. 그런 다음 설명을 업데이트하십시오. 미리 감사드립니다! – jmettraux