저는 netcat을 사용하여 TCP를 통해 서버에 연결하고 수신된 데이터를 지속적으로 파일로 전송하고 있습니다.
nc 10.0.2.2 3456 > file.data
터미널이나 스크립트에서 실행할 때 연결 상태가 유지됩니다.
서비스로 실행하여 계속 실행하고 실패하면 다시 시작하고 싶습니다. 그러나 systemd 서비스에서 동일한 스크립트를 실행하면 연결이 빠르게 끊어지고 로그가 표시됩니다.
ncat: connection reset by peer
nc를 서비스로 실행하는 데 제한이 있나요?
저는 다음과 같이 설정했습니다.
[Unit]
User=user
Type=simple
ExecStart=ncscript.sh
Restart=always
답변1
nc
서비스로 안정적으로 운영하고 있습니다 . 이것이 내가 한 일입니다:
[Service]
ExecStart=/bin/nc 10.10.1.20 19184
StandardOutput=journal
StandardError=journal
제 경우에는 nc
트리거 리모트 소켓 유닛을 사용하여 원격 서비스를 트리거했습니다. 서비스의 표준 출력은 소켓을 통해 라우팅되며 내 로그로 직접 이동됩니다.
> file.txt
스크립트에서 일부 리디렉션( )을 수행하고 있습니다 . 그것이 내가 보는 유일한 차이점이므로 그것이 문제의 원인이라고 생각합니다. 대신 다음을 사용할 수 있습니다.
StandardOutput=append:/path/to/file.txt
우리는 완전한 이야기를 갖고 있지 않을 수도 있습니다. 이렇게 하면:
nc 10.0.2.2 3456 > file.data &
이는 bash 스크립트가 종료될 때 다른 문제를 일으킬 수 있습니다.
답변2
어떤 이유로 nc는 systemd를 통해 실행될 때 FIN을 보내 서버 RST를 연결합니다.
에 추가하여 --recv-only
해결되었습니다 nc
.