사용자 정의 스트림을 생성할 수 있나요?

사용자 정의 스트림을 생성할 수 있나요?

여기서는 어떤 용어를 사용해야 할지 잘 모르겠습니다. 그러니 양해해 주시기 바랍니다.

저는 다음을 생성하는 애플리케이션을 작성 중입니다.많이로그의. 나는 내 애플리케이션이 로그를 로 스트리밍하고 다른 프로세스가 마치 스트림인 것처럼(예: ) foo읽을 수 있도록 허용할 수 있다면 멋지다고 생각했습니다 .foo/dev/random

즉, 나는 로그를 어딘가에 지속적으로 스트리밍하고(보관, 삭제 등과 같은 파일 시스템 문제에 대해 걱정할 필요 없이) 마치 끝이 없는 것처럼 다른 프로세스가 해당 스트림에 "접속"할 수 있는 기능을 갖고 싶습니다. 파일.

이 작업을 수행하려면 어떻게 해야 합니까? 무엇인가요 foo?

이상적으로는:

terminal 1
> mkthing foo
> while :; do echo 'abcdefg' >> foo; sleep 1; done

terminal 2
> echo foo
(outputs "abcdefg" every second)

답변1

로그를 보는 가장 일반적인 방법은 다음과 같습니다.파일에 쓰기. 로그를 보려면 파일을 읽으십시오. 파일에 행이 추가되는 것을 보려면 다음과 같은 명령을 사용하십시오.tail -f, 파일 끝에 도달한 후에도 파일을 열어두고 추가되는 추가 줄을 감시합니다. 옵션 -f은 "follow"이며,더 적은F"follow" 와 동일한 효과를 얻을 수 있습니다 . 다른 프로그램에서는 이 tail작업을 수행하는 전형적인 유틸리티이기 때문에 파일을 "테일링"하는 것으로 알려져 있습니다 . 보다tail이 사이트의 태그테일링 유틸리티에 대한 자세한 내용은

로그를 파일에 기록하고 싶지 않은 경우 다음에서 애플리케이션을 실행할 수 있습니다.화면또는티먹스. /usr/bin/my_application --some-option화면을 사용하여 백그라운드에서 실행하려면 다음을 수행하세요.

screen -S myapp -d -m /usr/bin/my_application --some-option

로그를 보려면 다음 안내를 따르세요.

screen -S myapp -d -r

분리하려면, 즉 로그 보기를 중지하려면 Ctrl+를 누르세요 . A d로그를 보는 동안 애플리케이션에 입력을 보낼 수도 있는데, 이는 바람직할 수도 있고 그렇지 않을 수도 있습니다. 읽기 전용 액세스 권한만 부여하려면 다음을 참조하세요.읽기 전용 모드에서 '화면'을 실행하는 방법이 있나요?

tmux를 사용하여 애플리케이션을 시작하려면:

tmux new-session -s myapp -d /usr/bin/my_application --some-option

최신 로그를 보려면:

tmux attach -r -t myapp

Ctrl+를 눌러 A d분리하세요. 애플리케이션과 상호작용할 수 tmux attach없도록 실행하세요 .-r


명명된 파이프당신이 원하는 것이 아닙니다. 나는 단지 그것이 표면적으로 적절해 보이기 때문에 언급하는 것뿐입니다(그리고 내가 글을 쓰는 동안 그것은 댓글에 나타납니다). 설명하는 대로 수행됩니다.

mkfifo foo
while :; do echo 'abcdefg' >> foo; sleep 1; done

와 병행하여

cat foo

정확히 한 명의 판독기가 있어야 하기 때문에 이는 원하는 것이 아닙니다. 리더가 없으면 쓰기 쪽이 차단됩니다. 판독기가 여러 개인 경우 각 줄(또는 프로그램이 출력을 생성하는 방식에 따라 청크)은 어느 정도 무작위로 선택된 정확히 한 명의 판독기에 의해 표시됩니다. 판독기가 있고 사라지면 쓰기 측에서 쓰기에 실패하고 비활성화하지 않은 경우 SIGPIPE를 받게 됩니다.

관련 정보