systemd 服务中的 netcat 重置

systemd 服务中的 netcat 重置

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

相关内容