비디오 파일(RAW)을 수신하여 트랜스코딩하는 프로세스가 있습니다.FFMPEG세 가지(다른 해상도) 결과 파일이 생성됩니다. 저는 분산 작업 대기열 시스템을 사용하고 있습니다(셀러리)는 FFMPEG의 각 프로세스를 다른 비동기 작업으로 처리합니다.
프로세스에 따라 세 가지 작업이 실행됩니다.
- 비디오 변환
- 클라우드 스토리지 버킷에 결과 업로드
- 결과 삭제
마지막 작업은 원본 비디오(트랜스코딩용)를 버킷에 업로드한 다음 삭제합니다.
이 세 가지 작업을 비동기식으로 시작한 다음 RAW 파일을 즉시 삭제하면 파일 삭제로 인해 RAW 파일을 사용하는 작업이 중단되나요?
추신: 트랜스코딩 작업이 시작되는 동안 RAW 파일이 메모리에 로드되고 3번 열린다고 가정합니다.
답변1
전체 RAW 파일이 메모리에 있다는 가정은 잘못된 것입니다. 일반적으로 파일이 열리면 프로세스는 파일을 읽고 쓰는 데 사용할 수 있는 파일 설명자를 얻습니다.
프로세스에 의해 파일이 열린 후 파일이 아직 열려 있는 동안 삭제되면 실제로 파일이 즉시 삭제되지는 않습니다. 프로세스가 더 이상 파일에 대한 핸들(파일 설명자)을 소유하지 않으면 파일이 실제로 삭제됩니다. 이를 사용하여 lsof
파일에 아직 핸들이 있는지 확인할 수 있으며, 해당 파일을 삭제하면 일반적으로 (deleted)
해당 줄에 텍스트가 나열되고 추가됩니다.
또한 열려 있는 파일을 삭제해도 디스크 공간을 회수하지 않으므로 파일이 열려 있는 한 안전하게 사용할 수 있습니다. 삭제된 파일에 더 이상 활성 파일 설명자가 없으면 파일 시스템은 소비된 디스크 공간을 회수합니다.
답변2
세 개의 ffmpeg 프로세스 모두 삭제하기 전에 입력 파일을 열어 둔 경우 작동할 가능성이 높습니다. 그러나 ffmpeg가 파일을 닫았다가 다시 열면 실패합니다. ffmpeg가 이 작업을 수행하지 않을 것이라고 확신할 수 있다면 아마도 안전할 것입니다.