나는 가지고있다 :
F:\xampp-htdocs>wsl --list
Windows Subsystem für Linux-Distributionen:
Ubuntu-22.04 (Standard)
Window 11의 로그 파일에 CD를 입력합니다.
/mnt/d/xampp-2024-15-01/apache/logs$
난 거기 있어
tail -f access.log
Tail은 마지막 줄만 출력하지만 더 이상 파일을 따르지 않습니다. WSL 및 Windows11 내에서 다른 파일로 이것을 시도했습니다. 불운,
원격 외부 실제 Ubuntu "20.04.6 LTS(Focal Fossa)" 시스템에서는 tail -f
예상대로 작동합니다.
내가 무엇을 놓치고 있나요?
답변1
핵심 문제는 inotify
Windows 드라이브에 액세스하기 위해 WSL2에서 사용하는 Plan 9(9P) 네트워크 파일 시스템에서 API가 지원되지 않는다는 것입니다. 이는 tail
많은 개발 도구(예: )의 "핫 리로드" 기능과 같은 기능에 영향을 미칩니다 npm watch
.
이는 다음과 같은 경우 WSL2에서 발생합니다.
- Linux 앱이 파일 시스템 변경 사항을 감시하기 위해 사용하려고 합니다
inotify
(이 경우에는 물론tail -f
) . - 파일은 Windows 드라이브에 있습니다(말씀하신 대로
/mnt/d
) . - (확신합니다) Windows 프로세스가 파일에 쓰고 있습니다. WSL2(예: )에서 Linux 프로세스를 사용하여 파일을 늘리면 가
echo foo >> file_name
성공적으로 업데이트됩니다tail -f
.
일반적인 해결 방법:
가능하다면 파일을 Linux 파일 시스템에 저장하세요. 때로는 이것이 가능하지만 때로는 그렇지 않습니다.
inotify
앱이 지원하는 경우 대신 폴링을 사용하세요 . 이 경우 다음 중 하나와 같이그래서 답변@KamilMaciorowski가 댓글에서 당신에게 지적한 것은 으로 끝났지tail -f ---disable-inotify <file>
만 당신은 어떤 답변도 당신에게 도움이 되지 않았다고 답했습니다.이것~할 수 있었다
tail
사용된 답변과 다른 버전 때문일 수 있습니다 . 재시도 간격을 추가해 볼 수도 있습니다.tail -f ---disable-inotify -s 1 <filename>
과거의 "전통적인" 제안은 사용 사례에 적합한 경우 WSL1을 사용하는 것이었습니다. 그러나 WSL1이 몇 년 동안 업데이트를 받지 못하면서 그 사용을 정당화하기가 점점 더 어려워지고 있습니다. 그래도 여전히 선택 사항입니다. WSL1에서는
inotify
Windows 드라이브에서 작동합니다.특히
tail
, 약간의 해킹된 해결 방법을 수행할 수 있습니다.pwsh.exe -c 'Get-Content <windows_path_to_file> -wait'
노트:
PowerShell Core가 설치되어 있지 않은 경우 (권장) 설치하거나
powershell.exe
.언급한 대로 WSL 내부에서 PowerShell을 사용하고 있으므로 다음을 사용하게 됩니다.윈도우파일 경로입니다. 예:
D:\xampp-2024-15-01\apache\logs$
.쉘을 중첩할 때 인용/이스케이프가 어려울 수 있습니다.
신용이 SO 답변.
-Wait
물론 이를 쉘 함수나 스크립트에 별칭으로 지정하거나 래핑할 수 있습니다.