我正在使用 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
。