백그라운드에서 파이프라인 bash 스크립트 실행

백그라운드에서 파이프라인 bash 스크립트 실행

netcat을 사용하여 로컬 호스트 통신을 모니터링하는 모니터링 스크립트를 작성하려고 합니다. 저는 두 개의 스크립트를 작성했습니다. 하나는 감시 루프를 시작하기 위한 것이고 다른 하나는 루프 자체를 위한 것입니다. 그것들은 다음과 같습니다:

시작 파일

#!/bin/bash
netcat localhost 1099  | bash loop.sh &

루프 문

#!/bin/bash
while read sInput; do
     ...do something with $sInput
done

포그라운드 없이 이 앱을 실행하는 것만으로도 문제가 없지만 백그라운드에서 이 스크립트를 실행하려고 하면 즉시 실행이 중단됩니다. 이런 일이 발생하는 이유와 이 문제를 완화하는 방법을 알려줄 수 있는 사람이 있습니까?

나의 궁극적인 목표는 아치 리눅스 데몬 스크립트를 생성하고 모든 것이 완벽하게 실행되도록 하는 데 사용할 수 있는 bash 스크립트를 갖는 것입니다. 당신의 도움을 주셔서 감사합니다.

답변1

표준 입력(stdin)에서 읽는 것 같습니다. -d(표준 입력에서 읽으려고 시도하지 않음) 옵션을 에 추가 하거나 netcat명령줄에서 리디렉션해 보세요.

netcat localhost 1099 <&- | bash loop.sh &

nohup쉘이 중지되기 전에 종료하는 경우 부정적인 영향을 받지 않도록 하기 위해 이를 사용할 수도 있습니다 .

답변2

netcat 프로세스는 표준 입력을 읽고 있습니다. 터미널에 연결되어 있으므로 netcat이 속한 프로세스 그룹(예: 파이프)이 전경에서 실행되고 있어야 합니다.

서버가 기대하는 입력을 보내려면 파이프 시작 부분에 무언가를 삽입해야 합니다. 예를 들어 HTTP 서버의 경우 다음과 같은 것이 있을 수 있습니다.

netcat localhost 1099 <<EOF | … &
GET HTTP/1.0 http://localhost:1099/somewhere
X-Header: wibble

EOF

서버가 입력을 읽지 못한 경우 리디렉션 netcat할 입력입니다 /dev/null.

답변3

별도의 새 데몬 bash 스크립트가 필요 없이 파이프를 제공하는 유틸리티를 찾았습니다. 유용할 수 있습니다:https://github.com/flonatel/pipeexec

pipexec -- [NETCAT netcat localhost 1099]  [LOOP bash loop.sh] '{NETCAT:1>LOOP:0}'

관련 정보