파일 쓰기를 프로세스로 전송

파일 쓰기를 프로세스로 전송

변경할 수 없는 OSX GUI 응용 프로그램이 있습니다. 작업이 완료되면 로그 파일에 새 CVS 줄을 기록합니다. 이 새로운 라인을 사용하고 싶지만 계속 추가되고 있습니다.

응용 프로그램의 출력을 스크립트로 직접 리디렉션하여 스크립트에서 생성된 새 줄을 처리할 수 있는 방법이 있습니까? 변경 사항을 가져오기 위해 X초마다 파일을 읽는 것은 권장되지 않습니다. 비록 파일 변경 사항을 감지하고 그런 식으로 처리하는 데 사용할 수는 있지만 launchd좀 더 우아한 것을 찾고 있습니다. 어떤 아이디어(예제 포함 - 배우고 있는 중)라면 크게 감사하겠습니다.

편집하다

이것이 최선의 접근 방식인지는 확실하지 않지만 tail의 -F 플래그를 사용하여 즉각적인 결과를 얻을 수 있었습니다. 마지막 줄을 필터링할 수 있지만 처음 실행될 때 파일이 업데이트되면 (필요에 따라) 마지막 줄뿐만 아니라 모든 줄이 출력됩니다.

tail -F -n 2 '/path/to/Epson4880_audit.txt' | grep "."

답변1

출력 파일을 FIFO로 대체하고 다른 프로그램이 이 파일에서 입력을 받도록 할 수 있습니다.

예를 들어:

mkfifo Epson4880_audit.txt
# launch your program
grep "." Epson4880_audit.txt

이는 작동이 보장되지 않는다는 점에 유의하세요. 일부 프로그램은 출력이 실제 파일인지 확인합니다. 행 로그를 실제로 유지하려면 두 번째 프로세스에서 행이 도착할 때 인쇄되도록 해야 합니다. 예: do tee real_Epson4880_audit.txt | grep "."또한 첫 번째 프로세스가 판독기를 기다려야 하기 때문에 두 번째 프로그램 없이는 첫 번째 프로그램을 시작할 수 없습니다. 첫 번째 프로그램을 실행하고 두 번째 프로그램을 실행하지 않으려면 먼저 FIFO를 삭제해야 합니다.

답변2

대부분의 운영 체제에는 파일 활동을 구독할 수 있는 기능이 있습니다. Linux에서는 이 기능이 커널에 내장되어 있으며 iNotify라고 합니다. 파일 활동을 모니터링하고 해당 업데이트를 처리하기 위해 이러한 라인을 따라 무언가를 만들 수 있습니다.

다음은 iNotify를 시작하는 데 도움이 되는 몇 가지 리소스입니다.

이러한 페이지에 C/C++ 코드가 표시되어 있더라도 페이지와 상호 작용하기 위해 자체 도구를 개발할 필요는 없습니다. 명령줄 도구를 사용하여 파일 및/또는 디렉터리를 구독한 다음 알림을 받을 수 있습니다.

노트:OSX에서는 다음과 같은 것을 사용합니다.kqueue. Stack Overflow에서 다음과 같은 제목의 다양한 옵션을 설명하는 이 게시물을 찾았습니다.Mac에 "watch" 또는 "inotifywait"와 같은 명령이 있나요?.

일부 도구는 inotifywait다음과 같이 OSX와 유사한 기능을 제공합니다.launchd,kqwait,fswatch또는watchdog.

취할 수 있는 또 다른 접근 방식은 Nagios와 같은 모니터링 도구가 로그 파일 활동을 모니터링하는 방법을 살펴보는 것입니다. Nagios에는 귀하의 요구에 정확히 맞는 수많은 플러그인이 있습니다. 그 중 일부는 파일 활동만 모니터링하고 다른 일부는 파일에서 특정 문자열을 모니터링합니다. 플러그인 페이지를 살펴보세요.

Nagios 플러그인 - 카테고리: 로그 파일

관련 정보