当作为一个暴发户的工作运行时,NC立即退出

我正在使用下面的/etc/init/jsonlog.conf upstart作业:

 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 

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

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

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

我在做一个假设 ,这是与stdin 。 我试过使用-q -1选项,但没有帮助。

PS我很好,事实上,这将只听一个客户在一个时间。

我发现你的nc命令有两个错误。 你正在调用nc以双向通信的方式,期望它执行单向通信。

-d标志可以停止从stdin读取nc ,这将使它进行单向通信,看来你正在尝试做。

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

所有的命令就这样变成:

 nc -dkl 3333 

不过看起来你正在使用一种不是为这项工作devise的工具。 我不build议使用nc而是build议您使用syslog协议和devise用于使用该协议的logging器。

nc -dl是你需要的nc的BSD风格。

RHEL7附带的nc不是BSD版本。 相反,它是nmap软件的ncat 。 与BSD版本不同,没有-d标志。 而不是-dl ,你可以使用-l --recv-only < /dev/zero 。 EL7附带的NCAT版本有一个(封闭的/固定的) 错误 ,如果EOF从读取stdin返回,那么在从套接字读取之前将closures程序。 这就是为什么你需要通过“/ dev / zero”或其他方式将数据传递到stdin。 新版本的NCAT支持--no-shutdown ,可以用来代替< /dev/zero