systemd에서 socat을 직접 시작할 수 있습니까?

systemd에서 socat을 직접 시작할 수 있습니까?

다음과 같은소캇명령줄은 쉘 프롬프트에 입력하면 예상대로 작동합니다.

# /usr/bin/socat UDP-RECV:4321 STDOUT

UDP 포트 4321에서 수신 대기하고 수신하는 모든 것을 표준 출력에 씁니다.

다음은 수신된 데이터를 systemd 로그(서비스 표준 출력의 기본 대상)에 기록할 목적으로 이 명령을 systemd 서비스로 시작하려는 시도입니다.

# /etc/systemd/system/socat.service
[Service]
ExecStart=/usr/bin/socat UDP-RECV:4321 STDOUT

그러나 서비스가 시작되면 socat은 즉시 종료됩니다.

Process: 7425 ExecStart=/usr/bin/socat UDP-RECV:4321 STDOUT (code=exited, status=0/SUCCESS)

socatrun 을 사용하여 이 문제를 조사한 결과 -d -d -d -dstdout에서 EOF가 발생하는 것으로 나타났습니다.

N starting data transfer loop with FDs [5,5] and [1,1]
N socket 2 (fd 1) is at EOF
I close(5)
N exiting with status 0

socat시스템 서비스로 사용할 수 있나요 ?

답변1

문제는 socat기본적으로 양방향으로 인해 발생합니다. 표준 입력을 읽으려고 시도하면 /dev/nullEOF를 받고 종료됩니다.

해결 방법은 다음 -u옵션을 사용하는 것입니다.

ExecStart=/usr/bin/socat -u UDP-RECV:4321 STDOUT

UDP-RECV:4321이는 socat에게 에서 까지 한 방향으로 실행하도록 지시합니다 STDOUT.

관련 정보