当作为新贵作业运行时,nc 在连接时立即退出

fad*_*bee 2 netcat upstart stdin nc

我正在使用以下/etc/init/jsonlog.conf新贵工作:

description     "jsonlog"

start on runlevel [23]
stop on runlevel [06]

respawn

script
  cd /tmp
  echo "about to listen"
  /bin/nc -l 3333
  echo "finished listening"
end script

post-stop script
  sleep 1
end script
Run Code Online (Sandbox Code Playgroud)

问题是nc每次客户端连接时都会立即退出。

所需的行为是接收到的所有数据(即 utf8 json)应以/var/log/upstart/jsonlog.log. 该服务器运行的是 Ubuntu 12.04LTS。

nc从 bash shell 运行时该命令可以正常工作。

我假设stdin. 我尝试过使用一个-q -1选项,但没有帮助。

PS 我很满意这样一个事实,即它一次只会听一个客户。

kas*_*erd 5

我发现你的命令有两个问题nc。您正在nc以一种用于双向通信的方式进行调用,并期望它执行单向通信。

-d标志可以停止nc读取,从而stdin使其进行单向通信,而这似乎是您正在尝试进行的。

另一个问题是nc -l默认情况下仅服务单个连接然后终止。您可以使用该-k标志来更改该行为。

总而言之,命令变成:

nc -dkl 3333
Run Code Online (Sandbox Code Playgroud)

然而,您似乎使用的工具并非专为该工作而设计。nc我建议您使用 syslog 协议和设计用于该协议的记录器,而不是使用它。