it-swarm-ko.tech

IIS7에서 잠긴 파일을 해제하는 방법?

프로덕션 빌드 중에 루트 디렉토리에있는 매우 큰 (10MB) 정적 컨텐츠 파일이 IIS에 의해 잠기 며 정리 작업으로 삭제할 수없는 경우가 있습니다). 한 번에 하나 이상의 고객에게 적극적으로 게재되었습니다.

빌드 프로세스는 다음을 통해 청소하기 전에 웹 사이트를 중지합니다

c:\Windows\System32\inetsrv\appcmd.exe stop site http://oursite.com

그러나이 하지 않음 파일을 해제합니다. 프로세스가 잠금을 해제하려면 IIS)을 다시 시작해야합니다.

appcmd.exe를 사용하면 IIS 완전히 다운 할 수 있습니다; 우리는 하지 말 것 이렇게하고 싶습니다!

IIS를 다시 시작하지 않고 IIS 잠금 파일을 해제하는 다른 방법이 있습니까?) 개별 웹 사이트를 중지하고 시작하는 것만으로는 파일 잠금을 해제 할 수 없습니다.

25
Jarrod Dixon

Sysinternal의 Process Explorer와 같은 파일 핸들을 찾아서 강제로 닫을 수있는 도구가 있지만이를 수행 한 후 애플리케이션 (이 경우 IIS)의 상태 및 동작은 정의되지 않습니다. 일부는 신경 쓰지 않고 일부는 오류가 있고 다른 일부는 열심히 충돌합니다.

올바른 해결 방법은 중단 된 상태에서 IIS를 사용하여 잠금을 완전히 해제하고 자체적으로 정리하여 서버 안정성을 유지하는 것입니다. 이것이 불가능한 경우 동일한 상자에 다른 사이트를 만들 수 있습니다. 새 콘텐츠가 포함 된 새 상자를 설정하고 도메인 이름/IP를 이동하여 새 콘텐츠를 프로덕션으로 "승격"합니다.

12
Greg Work

이를 위해 "Handle" 이라는 작은 도구를 사용합니다.

기본적으로 잠겨있는 파일 이름을 전달하고 사용중인 프로세스를 알려줍니다.

handle c:\weird.file
Something.exe pid: 1000 100: C:\weird.file
Something.exe pid: 1000 101: C:\weird.file

그런 다음 -c 스위치를 전달하여 핸들을 닫습니다.

handle.exe -c 101 -p 1000 -y
handle.exe -c 100 -p 1000 -y

래퍼 프로그램없이 빌드 스크립트에서 출력을 구문 분석하기 위해 노력하는 데 어려움을 겪을 수 있지만 희망이 있으면 도움이 될 것입니다.

13
Simon Johnson

임시 어셈블리에서 aspx 파일의 컴파일을 의미하는지 확실하지 않습니다. 우리는 ASP.NET 배포 프로젝트 를 사용하고 있는데, 이는 모든 aspx/ascx 파일을 미리 미리 컴파일합니다.

바이너리 파일을 "publish"에서 "bin"폴더로 복사하는 동안 모든 어셈블리가 복사 된 후 (몇 초) app_offline.htm 파일을 임시로 활성화합니다. 이렇게하면 파일 잠금이 발생하지 않았습니다.

편집 :

웹 사이트를 중지하는 대신 appcmd.exe를 사용하여 앱 풀을 재활용하려고 시도 할 수 있습니다.

C:\Windows\System32\inetsrv\appcmd.exe recycle apppool "My App Pool Name"
5
splattne

나는 이것을 지금 시도하고있다 : 디렉토리에서 색인을 활성화하면 파일 잠금에 문제가있을 수 있습니다. http://www.richard-banks.org/2008/04/how-to-fix-problems-with-locked-files.html

이것은 IIS 6.0이지만 이것이 OS와 관련이있는 것 같고 IIS) 근본 원인 일 수 있습니다.

2
Morten

Process Monitor 조사에 도움이 될 것입니다. 여기에 Mark의 블로그 ( the 녀석이 있습니다. 파일 핸들을 찾는 방법에 대한 도구를 작성했습니다.

파일 핸들 수준에서 잠금 해제를 자동화하기 위해이 nlocker tool 을 시도 할 수 있습니다.

1
Nick Kavadias

대답은 아니지만 IIS 서버를 다시 시작하지 않고 해당 파일을 "잠금 해제"할 수없는 경우의 해결 방법입니다.

비어있는 새 폴더를 빌드/배포하고 웹 사이트의 홈 디렉토리를 해당 폴더로 변경하면 어떻게됩니까? 그래도 새 폴더 이름을 작성하거나 두 이름 사이를 전환해야합니다.

해당 파일이 어떤 폴더에 속하는지 모르겠습니다. 루트 폴더에 있지 않아도된다면 새로 만든 폴더에 넣고 해당 폴더를 가리키는 가상 디렉터리를 만들 수 있습니다. 따라서 응용 프로그램의 표준 홈 디렉토리를 유지할 수 있습니다.

1
splattne

나는 같은 문제가 있었다. 이제 MSDeploy (Web Deploy)로 전환했으며 이제 아무 것도 중지하지 않고 웹 사이트를 안정적으로 업데이트 할 수 있습니다. 실제로이 단계는 자동화 된 빌드 도구에서 스크립팅되며 문제없이 항상 발생합니다. 그리고 그것은 또한 빠릅니다.

1
realMarkusSchmidt

물론, IIS 서비스를 중지하십시오. 어쩌면 뭔가 이해가되지 않을 수도 있습니다. 죄송합니다.

0
Mark Allen

주 : Windows 파일 잠금 의미론 전문가가 아님

Jarrod, 파일 이름을 바꿀 수 없습니까? 임시 확장명을 사용하여 새 파일을 만든 다음 현재 파일의 이름을 바꿀 수도 있습니다.

Windows 파일 잠금 시맨틱이 POSIX와 유사하게 작동하는 경우 파일에 대한 현재 읽기 잠금을 보유한 판독기는 여전히 읽기 스트림을 닫을 때까지 이전 파일을 계속 제공해야하며 새 판독기는 새 파일을 엽니 다.

0
Dave Cheney