세션 시작 시 파일을 열고 파일에 계속 쓰는 Python 데몬이 CentOS에서 실행되고 있습니다.
그러나 cronjob이 작성 중인 파일을 gzip으로 압축하여 파일이 log.txt에서 log.txt.gz로 이동되었습니다. 그러나 데몬은 계속해서 log.txt에 씁니다. 그런 다음 데몬이 중지되고 log.txt 파일 설명자를 닫습니다.
log.txt.gz로 파일을 옮긴 후, 데몬이 log.txt에 쓴 데이터를 복원할 수 있는 방법이 있나요?
답변1
AFAICT, 아니요. 문제는 gzip
프로세스가 새 파일을 생성하고 디렉터리에서 삭제하는 것을 포함하여 이전(압축 해제된) 파일을 해제한다는 것입니다. 파일 시스템에 파일을 가리키는 다른 하드 링크가 없으면 파일을 참조하는 마지막 파일 설명자가 닫히면 파일이 손실됩니다.
앞으로는 두 프로세스가 동시에 파일에 액세스(쓰기 및 삭제를 위해)하는 대신 파일 리소스에 대한 액세스를 동기화하는 것이 좋습니다.
gzip
또 다른 옵션은 압축된 복사본을 만드는 것입니다 . 그러나 파일에 기록된 모든 내용이 파일에 포함되지 않는 경쟁 조건이 발생합니다 gz
.