2010-12-17 2 views
2

난 내 레일 애플 리케이션에서 일부 백그라운드 프로세스를 실행하려면 delayed_job를 사용하고 있습니다. 이러한 프로세스는 로그 파일에 기록하는 것뿐만 아니라 DB를 읽고 씁니다.데몬을 중지하면 데이터가 손상 될 수 있습니까?

내 질문은 - 내가 일을 멈추었을 때 내 데이터가 손상 될 수있는 프로세스를 죽이거나 그 일이 끝날 때까지 기다리는 것입니까?

답변

2

모두 코드 작성 방법에 따라 다릅니다.

일반적으로 작업을 죽이면 코드의 플러그가 갑자기 움직이며 즉시 멈 춥니 다. 쓰기 도중이거나 버퍼가 비워 지거나 파일이 정상적으로 닫히기 전에 수 있습니다.

완료해야 할 작업이 있으면 신호를 트랩 할 수 있습니다. 그런 다음 코드가 신호를 무시하고 계속 실행되도록 선택하는 것이 최적의 솔루션이 아니거나 정상적으로 종료, 버퍼 플러시, DB 연결 닫기, 파일 닫기 등의 작업을 종료 한 다음 종료 할 수 있습니다.

그리고 신호를 무시하는 이유는 좋지 않습니다. 일부는 OS가 시스템을 종료하거나 다시 시작하기 전에 종료되도록 앱에 전송하기 때문에 좋지 않습니다. 닫히지 않는 앱은 사용자 나 시스템 관리자를 화나게 할 수 있습니다. 그러면 사용자가 시스템을 종료 할 수있는 방법을 찾을 것입니다. 그럴 가능성이 매우 높습니다.

자세한 내용은 Signal을 확인하십시오.

+1

모든 것을 모든 것이 든 없든, "트랜잭션"이라고 읽는 방식으로 작업을 설계하면이 문제를 우아하게 해결할 수 있습니다. – hurikhan77

+0

@hurican : 죽은 데몬이 트랜잭션을 지원하지 않았을 때 클라이언트를 부드럽게 만드는 것은 'trasactional'이 아닙니다. 따라서 그의 DB가 트랜잭션을 지원하는지 여부는 문제입니다. –